使用lodash在一个数组中查找包含在另一个数组中的值

3

我有一个类似的数组:

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

我正在使用node.js上的lodash来检查数组中的值。我想要搜索词语并返回一个响应。例如,如果我搜索"word1a",则响应为"answer1"。

我尝试:

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

但是我找不到结果;

显然,我获得了未定义的值,因为我正在比较一个完全相同的值。如何获取这个值?

2个回答

6

你得到undefined的原因是因为你没有返回o.words === "say"比较的结果。

但是你是对的,在这种情况下,这个比较是行不通的。你应该在_.find回调函数中使用像_.some这样的东西:

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

这应该会返回对象(如果找不到则返回undefined)。如果你想要特别得到answer,你仍然需要从对象中提取它。

这里有一个可工作的fiddle。请注意,您还应该为undefined的对象/属性提供一些额外的保护。但我会留给你自己去做。


2

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接