日常工作中和面试中也经常会遇到数组去重这个问题。
在这里整理了几种比较常见的方案,
声明数组
var a = [1, 2, 3, 4, 5, 1, 2, 3,6]
lesson1 : 双重for
function norepeat(a) {
// 第一层for用来控制循环的次数
for (var i = 0; i < a.length; i++) {
//第二层for 用于控制与第一层比较的元素
for (var j = i + 1; j < a.length; j++) {
//如果相等
if (a[i] == a[j]) {
//删除后面的 即第 j个位置上的元素 删除个数 1 个
a.splice(j, 1)
//j--是因为 splice后返回一个新的数组
//下次遍历会跳过j当前的值 跳过一个元素
j--;
}
}
}
return a
}
norepeat(a)
lesson2 : 单层for循环
原理:用一个新数组去存首次 出现的元素
function norepeat2(a){
var newArr = [];
for(let i = 0;i<a.length;i++){
//属性 indexOf是返回某个指定的字符在字符串中出现的位置,如果没有就会返回-1
if(newArr.indexOf(a[i]) == -1){
//当返回的是 -1时 就让其存入数组
newArr.push(a[i])
}
}
return newArr
}
lesson3 : filter 方案
let a2 = a.filter((item,index,self)=>{
return self.indexOf(item) === index
//去除重复元素依靠的是indexOf总是返回第一个元素的位置,
//后续的重复元素位置与indexOf返回的位置不相等,因此被filter滤掉了
})
console.log(a2)
lesson4 : set 方案 【ES6】
let set = Array.from(new Set(a))
//结合set数据类型的特性 去除重复数据 再使用array.from转换为一个数组
console.log(set)
欢迎补充....