2016-04-05 10 views
1

と他のアレイ内の配列の値を検索します。私は、配列内の値を確認するためにNode.jsの上lodash使用してい私のような配列を持っているlodash

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

。私は言葉を検索して返答したい。私は「word1a」を検索した場合、応答は「ANSWER1」私がしよう

です:

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

しかし、私は結果を見つける傾けます。

私は正確な値を比較しているので、明らかに私は定義されていません。どのように値を取得できますか?

答えて

4

また、undefinedも、o.words === "say"の比較結果を返さないため、undefinedとなっています。

しかし、そうだとすれば、この比較はうまくいかないでしょう。あなたは_.findコールバックの内側に_.someのようなものを使用する必要があります

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

(何も見つからない場合、または未定義の)これはあなたに戻ってオブジェクトを与える必要があります。 answerが特に必要な場合は、引き続きオブジェクトから引き出す必要があります。

ここにはworking fiddleです。また、オブジェクト/プロパティundefinedに対して何らかの保護を追加する必要があることに注意してください。私はあなたにそれを残すでしょう。

1

アンES6バージョン:

別の答えで述べたように
const term = "word1b"; 

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

、あなたはまだ返されたオブジェクトから.answer値を事前につかむ有無を確認する必要があります。

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