需要帮助理解 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() 完全符合您的要求。
我想在我的代码中使用 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() 完全符合您的要求。