我想在我的代码中使用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方法呢?
感谢您的帮助!
答案 0 :(得分:6)
我认为some()完全符合您的要求。
答案 1 :(得分:3)
_.includes()
方法与SameValueZero
比较器进行比较,这是一个特殊的比较,主要是===
。即使您的数组中有一个类似{'attribtueId' : 1001}
的对象,_.includes()
调用永远也找不到它,因为两个不同的对象永远不会相互比较为===
。
相反,当您将对象传递给_.find()
时,库会假定您希望它执行_.matches()
比较,这将比较" target"的属性。宾语。因此,在您的情况下,_.find()
可能是正确的选择。 _.includes
方法真正填补了一个独特的利基。