1.简单的数组去重就使用常用的去重方式好了
可以看这里: js多种数组去重方法-CSDN博客
2. 下面是关于object的数组去重
// 普通数组和 Object数组去重
const list1 = [1, 4, 45, 6, 3, 4, 5, 3, 2, 1, 3, 2];
const list2 = ["sss", "sss", "aa", "bb", "cc", "aa"];
const list3 = [{ id: 1, name: "hh" },{ name: "hh", id: 1 },{ id: 1, name: "hh", num: 8 },{ id: 1, num: 8, name: "hh" },{ id: 1, name: "hh" },{ name: "hh" },{ num: 8, name: "hh" },{ id: 1, name: "hh" },
];const toRepetition = (arr) => {let newArr = [...arr];for (let i = 0; i < newArr.length; i++) {// 去到 i+1 再开始后续值比较for (let j = i + 1; j < newArr.length; j++) {if (equals(newArr[i], newArr[j])) {// 去掉重复的值newArr.splice(j, 1);j--;}}}return newArr;
};const isObject = (val) => typeof val === "object" && val !== null; // 辅助判断是否为一个对象
function equals(val1, val2) {// 判断是不是对象,是对象再进行下面比较if (isObject(val1) && isObject(val2)) {const key1 = Object.keys(val1); //拿到第一个对象所有的属性名const key2 = Object.keys(val2); //拿到第二个对象所有的属性名if (key1.length !== key2.length) {// 如果两个数量不相等,必定不是同一个对象return false;}// 如果属性名两个数量相等,看看属性名,在另外一个数组里边存在不for (const k of key1) {if (!key2.includes(k)) {// 如果存在属性名不同,必定不是同一个对象return false;}// 如果属性名两个数量相等,属性名名字都相同 ,递归比较属性值if (!equals(val1[k], val2[k])) {// 如果存在两个值不同,必定不是同一个对象return false;}}// 如果上面的值都满足了,必定为同一个对象return true;} else {// 不是对象就是数值比较return val1 === val2;}
}console.log("普通数组去重l-->", toRepetition(list1));
console.log("普通数组去重2-->", toRepetition(list2));
console.log("Object数组去重3-->", toRepetition(list3));