我有一个对象数组:
const array = [{
"colour": "red",
"job": "student",
"title": "Mr",
},
{
"colour": "green",
"job": "student",
"title": "",
},
{
"colour": "",
"job": "teacher",
"title": "Mr",
},
{
"colour": "red",
"job": "student",
"title": "Mr",
}}]
我想比较数组中的对象。
到目前为止,我所拥有的似乎并不有效,因为我将比较索引i=1
和j=2
以及i=2
和j=1
,这是比较完全相同的对象。我使用Lodash_.isEqual()
来比较对象。
const handleArrayItems = () => {
for (let i = 0; i <= array.length; i++) {
for (let j = 1; j < array.length; j++) {
if (j === i) {
continue; //to avoid comparing same object
}
if (_.isEqual(array[j],array[i])) {
return true;
}
}
}
};
根据上面的返回值,将其传递到if/else语句中。
if (handleArrayItems()) {
console.log("found a duplicate item in array")
}
单独的对象彼此不相等。
if (_.isEqual(array[j] === array[i])) {
将首先计算实参:
array[j] === array[i]
是false
,结果是:
if (_.isEqual(false)) {
不工作
您需要将两个值传递给isEqual
进行比较
if (_.isEqual(array[j], array[i])) {
使Lodash可以自己比较值。
让j
从i+1
到array.length
做两次比较。
i
只能去length-1
,因为j
会去到最后。
for (let i = 0; i <= array.length-1; i++) {
for (let j = i+1; j < array.length; j++) {