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

时间:2016-04-05 00:50:53

标签: arrays node.js lodash

我有一个数组如:

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 个答案:

答案 0 :(得分:6)

嗯,你也得到undefined,因为你还没有返回o.words === "say"比较。

但是你是对的,这种比较在这种情况下不起作用。您应该在_.some回调中使用_.find之类的内容:

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

这应该会返回对象(如果没有找到,则为undefined)。如果你特别需要answer,你仍然需要将它从对象中拉出来。

这是一个working fiddle。请注意,您还应该对undefined个对象/属性进行一些额外保护。不过,我会把它留给你。

答案 1 :(得分: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