2016-04-05 4 views
1

Ich habe ein Array wie:Suchen Sie einen Wert in einem Array innerhalb anderem Array mit lodash

var db = [{ 
     "words": ["word1a", "word1b", "word1c"], 
     "answer": "answer1" 
    }, { 
     "words": ["word2a", "words2b"], 
     "answer": "answer2" 
    }] 

Ich verwende lodash auf node.js Werte in einem Array zu überprüfen. Ich möchte Wörter suchen und eine Antwort zurückgeben. wenn ich "word1a" Zum Beispiel suchen, ist die Antwort "answer1"

Ich versuche:

var e = _.find(db, function(o){ 
    o.words === "say" 
}); 
console.log(e); 

Aber ich kann nicht ein Ergebnis finden;

Offensichtlich werde ich undefiniert, weil ich einen genauen Wert vergleiche. Wie kann ich den Wert bekommen?

Antwort

4

Nun, Sie bekommen auch undefined, weil Sie auch nicht den Vergleich zurückgeben.

Aber Sie haben Recht, dieser Vergleich würde in diesem Fall nicht funktionieren. Sie sollten so etwas wie _.some innerhalb des _.find Rückrufs verwenden:

var e = _.find(db, function(o) { 
    return _.some(o.words, function(word) { 
     return word === 'say'; 
    }); 
}); 

Dies sollten Sie das Objekt zurück (oder nicht definiert, wenn keine gefunden werden). Wenn Sie speziell answer möchten, müssen Sie es immer noch aus dem Objekt ziehen.

Hier ist ein working fiddle. Beachten Sie, dass Sie zusätzlichen Schutz gegen undefined Objekte/Eigenschaften hinzufügen sollten. Das überlasse ich dir jedoch.

1

Eine ES6 Version:

const term = "word1b"; 

const res = _(db) 
    .filter(item => item.words.indexOf(term) !== -1) 
    .first() 
    .answer; 

Wie in einer anderen Antwort erwähnt, sollten Sie immer noch auf die Existenz prüfen vorab packte den .answer Wert aus dem zurückgegebene Objekt.

http://jsbin.com/kihubutewo/1/edit?js,console

Verwandte Themen