gpt4 book ai didi

javascript - 如何检查两个对象数组是否具有相同的属性值?

转载 作者:行者123 更新时间:2023-12-04 07:35:19 26 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





How to determine equality for two JavaScript objects?

(72 个回答)


3个月前关闭。




我有两个数组,想检查所有 ID 是否相同

let a = [
{id:0, name:"test0"},
{id:1, name:"test1"}
];

let b = [
{id:0, name:"test0"},
{id:1, name:"test1"}
];
上面我们看到的数组是相等的
和我这样累的方式
JSON.stringify(a) === JSON.stringify(b) => True
我读了 JSON.stringify如果我们有大阵列,它会影响性能
那么有没有另一种方法可以获得相同的结果?

最佳答案

const areEqual = (a = [], b = []) => {
// compare length of arrays
if(a.length !== b.length) {
return false;
}
// get sorted lists of ids
const arr1 = a.map(({id}) => id).sort(), arr2 = b.map(({id}) => id).sort();
// iterate over the arrays and compare, if at an index, items mismatch, return false
for(let i = 0; i < arr1.length; i++) {
if(arr1[i] !== arr2[i]) {
return false;
}
}
// if it passes all the items, return true
return true;
}

console.log(
areEqual(
[{id:0, name:"test0"}, {id:1, name:"test1"}],
[{id:0, name:"test0"}, {id:1, name:"test1"}]
)
);

使用 Set 的另一种解决方案:

const areEqual = (a = [], b = []) => {
// compare length of arrays
if(a.length !== b.length) {
return false;
}
// get ids set in b
const idsSetInB = new Set(b.map(({id}) => id));
// iterate over a, and check if the id of an item is not in b
for(let {id} of a) {
if(!idsSetInB.has(id)) {
return false;
}
}
// if it passes all the items, return true
return true;
}

console.log(
areEqual(
[{id:0, name:"test0"}, {id:1, name:"test1"}],
[{id:1, name:"test1"}, {id:0, name:"test0"}]
)
);

关于javascript - 如何检查两个对象数组是否具有相同的属性值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67780569/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com