2017-06-20 2 views
0

Im Moment habe ich die folgende Struktur:Vergleich Eingang Array javascript

"name" : 'Invisibility', 
    "ingredients" : { 
     "CatTail" : 2, 
     "Arsenic" : 1, 
     "Newt" : 2, 
    }, 
    "name" : "Super Strength", 
    "ingredients" : { 
     "Plutonium" : 2, 
     "CatPee" : 5, 
     "Rock" : 10 
    } 

Ich bin in der folgenden Art und Weise Eingang als Array unter:

input = { 
    firstIngredient : firstQuantity, 
    secondIngredient : secondQuantity, 
    thirdIngredient : thirdQuantity, 
} 

Die Idee ist, dass ich eine Liste habe von Zutaten und Mengen als Eingabe und jetzt möchte ich sehen, ob die übermittelten Werte einer der oben genannten Zutaten entsprechen.

Bin ich richtig in der Annahme, dass ich eine Funktion erstellen sollte, die beide Elemente übergibt und eine for-Schleife über sie ausführt und Schlüssel wie in dieser Antwort beschrieben vergleicht? Comparing Arrays of Objects in JavaScript

Vielen Dank!

+0

Was sollte das erste "Ding" sein? Es ist weder ein Array noch ein Objekt noch ein Array von Objekten. "Input" ist ein Objekt und kein Array. – Andreas

+0

Ihre erste Struktur sieht aus; Sie können nicht mehrere Schlüssel mit demselben Namen haben. –

+0

Hmmm ok, ich habe es in eine Mongo-Sammlung wie unten eingefügt. Gibt es eine bessere Struktur? . '\t db.collection ('Rezepte') einfügen ({ \t \t "name": 'Unsichtbarkeit', \t \t "Zutaten": { \t \t \t "cattail": 2, \t \t \t "Arsen" : 1, \t \t \t "Newt" \t: 2, \t \t}, \t \t "name": "super Strength", \t \t „ing redients“: { \t \t \t "Plutonium": 2, \t \t \t "CatPee": 5, \t \t \t "Rock": 10 \t \t} \t});' – roo

Antwort

0

Unabhängig davon, wie Sie fortfahren gehen, hier ist Code, der die input ein Rezept vergleicht:

var recipes = [{ 
 
    "name": 'Invisibility', 
 
    "ingredients": { 
 
    "CatTail": 2, 
 
    "Arsenic": 1, 
 
    "Newt": 2, 
 
    } 
 
}, { 
 
    "name": "Super Strength", 
 
    "ingredients": { 
 
    "Plutonium": 2, 
 
    "CatPee": 5, 
 
    "Rock": 10 
 
    } 
 
}]; 
 

 
var input = { 
 
    "CatPee": 5, 
 
    "Rock": 10, 
 
    "Plutonium": 2, 
 
}; 
 

 
function matches(a, b) { 
 
    var match = true; 
 
    Object.keys(a).forEach(ingredient => { 
 
    if (a[ingredient] !== b[ingredient]) match = false; 
 
    }); 
 
    return match; 
 
} 
 

 
recipes.forEach(recipe => { 
 
    if (matches(input, recipe.ingredients)) console.log("match found: " + recipe.name); 
 
});

Im Fall einer mongodb Abfrage Ich denke, man würde hinzufügen eine Art benutzerdefinierter Filter, der die Vergleichsfunktion aufruft.

+0

Ah, das ist hilfreich! Die Struktur macht jetzt mehr Sinn :) - Danke! – roo