数组去重
new Set 方式
const removeDuplicateItems = arr => [...new Set(arr)];
// const removeDuplicateItems = arr => Array.from(new Set([1,2,3,3,4,4]));
removeDuplicateItems([42, 'foo', 42, 'foo', true, true]); //=> [42, "foo", true]
indexOf 方式
var arr = [1, 2, 3, 2, 6, '2', 3, 1];
function uniqueArr(arr) {
return arr.filter(function (ele, index, array) {
// 利用数组indexOf()方法,返回找到的第一个值的索引
// 如果数组元素的索引值与indexOf方法查找返回的值不相等,则说明该值重复了,直接过滤掉
return array.indexOf(ele) === index;
})
}
console.log(uniqueArr(arr)); //=> [1, 2, 3, 6, "2”]
根据判断老数组的数据 索引是否相同
function uniqueArr1(arr) {
let newAry = [];
for (let i = 0; i < arr.length; i++) {
if (arr.indexOf(arr[i]) === i) {
newAry.push(arr[i]);
}
}
return newAry;
}
console.log(uniqueArr1(arr));
根据判断 新数组的数据是否能查到
function uniqueArr2(arr) {
let newAry = [];
for (let i = 0; i < arr.length; i++) {
if (newAry.indexOf(arr[i]) === -1) {
newAry.push(arr[i]);
}
}
return newAry;
}
console.log(uniqueArr2(arr));
通过i++ 的方式跳过重复元素的push
// [42, 'foo', 42, 'foo', 'true', true];
function uniqueArr3(arr) {
let newAry = [];
for (let i = 0; i < arr.length; i++) {
for (let j = i + 1; j < arr.length; j++) {
if (arr[i] === arr[j]) {
j = ++i;
}
}
newAry.push(arr[i]);
}
return newAry;
}
console.log(uniqueArr3(arr));
对象数组去重
let person = [
{id: 0, name: "小明"},
{id: 1, name: "小张"},
{id: 2, name: "小李"},
{id: 3, name: "小孙"},
{id: 1, name: "小周"},
{id: 2, name: "小陈"},
];
let obj = {};
let peon = person.reduce((cur,next) => {
obj[next.id] ? "" : obj[next.id] = true && cur.push(next);
return cur;
},[]) //设置cur默认类型为数组,并且初始值为空的数组
console.log(peon); // 原理的 利用的对象key不能重复去重,循环方式使用的 reduce
对象数组 去除 另外一个对象数组中数据
let ary = [{ id: 1 }, { id: 2 }];
let ary1 = [{ id: 1 }];
// 方式一
ary = ary.filter(item => {
let a = ary1.map(v => v.id);
return !a.includes(item.id);
});
let aa = ary;
console.log(aa,ary1); // [{ id: 2 }] [{ id: 1 }]
// 方式二
ary.filter(item=>!ary1.some(v=>v.id===item.id));
Notion – The all-in-one workspace for your notes, tasks, wikis, and databases.https://serious-lose.notion.site/Array-deduplication-20e1535a638b4b43b8ff2c9cb0bd9d31