2016-04-05 46 views
1

一個值I有一個數組,例如:查找其它陣列內部的陣列與lodash

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

我使用lodash上的node.js以陣列來檢查值。我想搜索單詞並返回響應。例如,如果我搜索 「word1a」 時,回答是 「ANSWER1」

我嘗試:

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

但我不能找到一個結果;

很明顯,我弄不明白,因爲我正在比較一個確切的值。我如何獲得價值?

回答

4

那麼,你也得到undefined,因爲你也沒有返回o.words === "say"比較。

但你說得對,這種比較在這種情況下不起作用。你應該使用類似_.some_.find回調中:

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