JS中判断数组是否包含相同内容,每个子元素内容相同,顺序不同也算相同,而且数组里的内容不只有基本类型,还可能有对象,看了网上很多方法,测试了一下,基本都不太对。。。
JS中判断数组是否包含相同内容,每个子元素内容相同,顺序不同也算相同,而且数组里的内容不只有基本类型,还可能有对象,看了网上很多方法,测试了一下,基本都不太对。。。
function isEquals(a, b) {
return JSON.stringify(a.sort()) === JSON.stringify(b.sort());
}
缺陷:比较数组的时候必须按顺序相等,因为数级里的 object 没法排序
const compare = (() => {
function compareArray(a, b) {
console.log("array", a, b);
if (a.length !== b.length) {
return false;
}
const length = a.length;
for (let i = 0; i < length; i++) {
if (!compare(a[i], b[i])) {
return false;
}
}
return true;
}
function compareObject(a, b) {
console.log("object", a, b);
const keya = Object.keys(a);
const keyb = Object.keys(b);
if (keya.length !== keyb.length) {
return false;
}
return keya.every(key => {
if (!compare(a[key], b[key])) {
return false;
}
return true;
});
}
function compare(a, b) {
if (a === b) {
return true;
}
if (typeof a !== typeof b || a === null || b === null) {
return false;
}
if (Array.isArray(a)) {
if (!Array.isArray(b)) {
return false;
}
return compareArray(a, b);
}
if (typeof a === "object") {
return compareObject(a, b);
}
console.log("value", a, b);
return false;
}
return compare;
})();
var aa = [{ Name: "YuanXP", Id: 9 }, { Name: "YuanX", Id: 9 }];
var bb = [{ Name: "YuanXP", Id: 9 }, { Id: 9, Name: "YuanX" }];
var cc = [{ Name: "YuanXP", Id: 19 }, { Id: 9, Name: "YuanX" }];
console.log(compare(aa, bb));
console.log(compare(aa, cc));
13 回答13.1k 阅读
7 回答2.3k 阅读
3 回答1.4k 阅读✓ 已解决
6 回答1.5k 阅读✓ 已解决
2 回答1.5k 阅读✓ 已解决
3 回答1.5k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决