需要帮助理解 lodash 的 _.includes 方法

Need help understanding lodash's _.includes method

我想在我的代码中使用 lodash 的 _.includes 方法,但是每当我有一个对象数组时我都无法让它工作,而是最终依赖于 _.find 方法。

根据我的测试,我只能 _.includes 使用简单的数组。但也许这就是它应该的工作方式?

总的来说,我对 Lodash 和编程还很陌生,所以我想我会问一下,以防我遗漏了一些有关如何使用此方法的信息。

我使用以下代码创建了一个 jsbin:http://jsbin.com/regojupiro/2/

var myArray = [];

function createArray(attName, attId, otherId) {
    var theObject = {};

    theObject.attributeName = attName;
    theObject.attributeId = attId;
    theObject.otherId = [otherId];

      return theObject;
}

myArray.push(createArray('first', 1001, 301));
myArray.push(createArray('second', 1002, 302));
myArray.push(createArray('third', 1003, 303));
myArray.push(createArray('fourth', 1004, 304));

var isPresent1 = _.includes(myArray, {'attribtueId' : 1001});
var isPresent2 = _.includes(myArray, 1001);
var found = _.find(myArray, {'attributeId' : 1001});

console.log(isPresent1);
console.log(isPresent2);
console.log(found);
console.log(myArray);

两个 "isPresent" 变量 return 都是错误的,但是 _.find 方法 return 是正确的对象。

当我只需要做一个简单的 true/false 检查以查看我的对象数组中是否存在一个值时,我希望得到一些帮助,以更好地理解如何使用 _.includes 方法.

或者,如果这不是这项工作的错误工具,_.find 方法是这项工作的正确工具,还是我还不熟悉的其他一些 lodash 方法?

感谢您的帮助!

_.includes()方法与SameValueZero比较器进行比较,这是一种特殊的比较,主要类似于===。即使你的数组​​中有一个看起来像 {'attribtueId' : 1001} 的对象,_.includes() 调用也永远找不到它,因为两个不同的对象永远不会相互比较 ===

相比之下,当您将对象传递给 _.find() 时,库假定您希望它执行 _.matches() 比较,这将比较 "target" 对象的属性.因此,在您的情况下,_.find() 可能是正确的选择。 _.includes 方法确实填补了一个独特的利基市场。

我认为 some() 完全符合您的要求。