前言:只需要掌握这一个方法,就可以对有任何重复的数据数组,进行去重了。
可以自己思考下,怎么对以下对象数组去重:
const arr = [
{ a: 1, b: 2 },
{ b: 2, a: 1 },
{ a: 1, b: 2, c: { a: 1, b: 2 } },
{ b: 2, a: 1, c: { b: 2, a: 1 } },
];
开始构建去重函数:
// 判断是否对象
const isObject = (val) => typeof val === "object" && val !== null;
// 判断两个数据是否相同
const equals = (val1, val2) => {
if (!isObject(val1) || !isObject(val2)) return Object.is(val1, val2);
if (val1 === val2) return true;
const val1Keys = Object.keys(val1);
const val2Keys = Object.keys(val2);
if (val1Keys.length !== val2Keys.length) return false;
for (const key of val1Keys) {
if (!val2Keys.includes(key)) {
return false;
}
const res = equals(val1[key], val2[key]);
if (!res) return false;
}
return true;
};
// 数组去重
const deduplication = (arr) => {
const newArr = [...arr];
for (let i = 0; i < newArr.length; i++) {
for (let j = i + 1; j < newArr.length; j++) {
if (equals(newArr[i], newArr[j])) {
newArr.splice(j, 1);
j--;
}
}
}
return newArr;
};
使用去重函数,newArr 就是去重后返回的数组:
let newArr = deduplication(arr);