比较对象数组中的每一项



我有一个对象数组:

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=1j=2以及i=2j=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可以自己比较值。

ji+1array.length做两次比较。

i只能去length-1,因为j会去到最后。

for (let i = 0; i <= array.length-1; i++) {
for (let j = i+1; j < array.length; j++) {

相关内容