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

时间:2015-03-31 17:12:16

标签: javascript lodash

我想在我的代码中使用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”变量都返回false,但_.find方法返回正确的对象。

当我只需要进行简单的真/假检查以查看我的对象数组中是否存在值时,我希望能够更好地理解如何使用_.includes方法。

或者,如果这是工作的错误工具,那么_.find方法是否适合这项工作,或者其他一些我不熟悉的lodash方法呢?

感谢您的帮助!

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:3)

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

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