JavaScript数组去重方法合集
const arr = [1, 1, '1', 17, true, true, false, false, 'true', 'a', {}, {}];
1. indexOf 对象属性
arr.forEach((key,index)=>{ //-循环原数据,并拿原数据中的每一项和临时数据进行比较
if(newArr.indexOf(key) === -1){ //-如果临时数组中不存在则 push 到临时数组中
newArr.push(key)
}
})
console.log(newArr); //-Result【结果】: [1, '1', 17, true, false, 'true', 'a', {}, {}]
- new Map(数组)
for (let i = 0; i < arr.length; i++) {
m.set(arr[i], arr[i]);
}
console.log(m) //- Map(9) {1 => 1, '1' => '1', 17 => 17, true => true, false => false, …} 返回一个 Map 对象
const newArr = []
m.forEach(function (value, key) {
newArr .push(value)
})
console.log(newArr );//[1, '1', 17, true, false, 'true', 'a', {}, {}]
- new Set(数组) ==>> Set结构不能接收重复数据的特点
console.log(newArr);// [1, '1', 17, true, false, 'true', 'a', {}, {}]
// Set是一系列无序、没有重复值的数据集合,传入一个需要去重的数组,Set会自动删除重复的元素 然后再将Set转数组返回。此方法效率高,代码清晰,缺点是存在兼容性问题
- filter + indexOf
return self.indexOf(item) === index;
})
console.log(newArr);// [1, '1', 17, true, false, 'true', 'a', {}, {}]
// filter把接收的函数依次作用于每一个数组项,然后根据返回值 true or false 决定是否保留该值
// 优点在于可在去重时插入对元素的操作,可拓展性强
- reduce + includes
if (!newArr.includes(element)) {
newArr.push(element);
}
return newArr;
}, []);
// reduce()把结果继续和序列的下一个元素做累加计算
// 利用 reduce 遍历和传入一个空数组作为去重后的新数组,然后内部判断新数组中是否存在当前遍历的元素,不存在就插入新数组
// 缺点在于时间消耗多,内存空间也额外占用
7.冒泡排序法
function noRepeat1(arr) {
for (var i = 0; i < arr.length - 1; i++) {
for (var j = i + 1; j < arr.length; j++) {
if (arr[i] === arr[j]) {
arr.splice(j, 1);
j--;
}
}
}
return arr;
}
var arr2 = noRepeat1(arr);
console.log(arr2); //[1, 23, 3, 5, 6, 7, 9, 8]```

浙公网安备 33010602011771号