使用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"
比较。
但是你是对的,这种比较在这种情况下是行不通的。 您应该在_.find
callback中使用_.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
值。