使用lodash在其他数组中查找数组中的值

我有一个数组如:

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

我在node.js上使用lodash来检查数组中的值。 我想search单词并返回响应。 例如,如果我search“word1a”,答案是“答案1”

我尝试:

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

但我找不到结果;

显然,我没有定义,因为我正在比较一个确切的值。 我怎样才能获得价值?

那么,你也undefined因为你也没有返回o.words === "say"比较。

但是你是对的,这种比较在这种情况下是行不通的。 您应该在_.findcallback中使用_.some_.find东西:

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

这应该给你的对象(或未定义的,如果没有被发现)。 如果你想特别answer ,你仍然必须把它从对象中拉出来。

这是一个工作小提琴 。 请注意,您还应该对undefined对象/属性进行一些额外的保护。 不过,我会留给你的。

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