数组去重的方法
1. 数据结构 Set
var arr = [1,2,3,1,2,3,1,2,3,1,2,3]
console.log([...new Set(arr)]);
//(3) [1, 2, 3]
2. reduce 和 indexOf 的组合
思路,首先 prev
初始化一个空数组,然后用 indexOf
检查 prev
中 是否有 next
,如果有,就把 next
塞到 prev
里,如果没有就返回 prev
,相当于什么都不干。
var arr = [1,2,3,1,2,3,1,2,3,1,2,3]
var result = arr.reduce(function (prev,next) {
if(prev.indexOf(next) == -1){
return prev.concat(next)
}else{
return prev;
}
},[]);
console.log(result);
//(3) [1, 2, 3]
3. reduce 和 includes 的组合
思路同 No.2
var arr = [1,2,3,1,2,3,1,2,3,1,2,3];
var result = arr.reduce(function (prev,next) {
if(!prev.includes(next)){
return prev.concat(next)
}else{
return prev;
}
},[]);
console.log(result);
//(3) [1, 2, 3]
4. 双重 for 循环 + splice 修改去重 (算法)
var arr = [1,2,3,1,2,3,1,2,3,1,2,3];
for (let i = 0; i < arr.length; i++) {
for (let j = i + 1; j < arr.length;j++) {
if(arr[i] == arr[j]){
arr.splice(j,1);
j--;
//j--不能少,因为你删除元素之后,数组会往前移
//那么现在的j元素就被前移的元素给替代了
//而你之后又j++
//所以你跳过了一个元素
}
}
}
console.log(arr);
//(3) [1, 2, 3]
5. sort 方法排序
var arr = [1,2,3,1,2,3,1,2,3,1,2,3];
//首先排一下序,怎么排都行,主要是有序
arr.sort();
var array = [arr[0]];
for (var i = 1; i < arr.length; i++) {
//排完序之后,如果当前元素和前一个元素不相等,那么就把当前元素记下来
if(arr[i] !== arr[i - 1]){
array.push(arr[i]);
}
}
console.log(array);
//(3) [1, 2, 3]
6. filter 和 indexOf 的组合
- 使用了
IndexOf
的特性,只会找到第一个元素的下标
var arr = [1,2,3,1,2,3,1,2,3,1,2,3];
//过滤器
var arr1 = arr.filter(function (item, index) {
//用indexOf的特性,只会找到第一个元素的下标
//如果后面有重复元素的话,这个等式就不会成立
//比方说[1,2,1],第三个1的index是2,而它的indexOf是0
return arr.indexOf(item,0) === index;
});
console.log(arr1);
//(3) [1, 2, 3]
7. map 方法实现
map
是个映射
let map = new Map();
let result = [];
let arr = [1,1,1,2,2,2,3,3,3];
for (var i = 0; i < arr.length; i++) {
if (map.has(arr[i])) {
map.set(arr[i],true);
}else{
//如果没有,把这个元素放到map中去
map.set(arr[i],false);
result.push(arr[i]);
}
}
console.log(result);
//(3) [1, 2, 3]