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

Posted

技术标签:

【中文标题】使用 lodash 在其他数组内的数组中查找一个值【英文标题】:Find a value in an array inside other array with lodash 【发布时间】:2016-07-24 17:48:39 【问题描述】:

我有一个数组,例如:

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);

但是我找不到结果;

显然,我得到了未定义,因为我正在比较一个确切的值。如何获得价值?

【问题讨论】:

【参考方案1】:

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

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

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

这应该会返回对象(或未定义,如果没有找到)。如果你特别想要answer,你仍然需要把它从对象中拉出来。

这是working 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

【讨论】:

以上是关于使用 lodash 在其他数组内的数组中查找一个值的主要内容,如果未能解决你的问题,请参考以下文章

使用 lodash 从字符串数组中查找子字符串

查找存储在数组中的对象值键内的单词

如何使用 lodash 从复杂的对象数组中获取值?

lodash简介

使用 lodash 从与正则表达式匹配的数组中获取值

JavaScript:查找值是不是在数组中的对象内的最佳方法[重复]