前言:只需要掌握這一個方法,就可以對有任何重復的數據數組,進行去重了。
可以自己思考下,怎么對以下對象數組去重:
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);