js中常见的数组去重方法
js中对数组进行遍历的方法有多种 常见的有: for循环 ,for in ,for of,ES6新增的常见的 for each ,filter ,map ,some ,every等
1.双重for循环去重
思路:定义一个数组 使用双重for循环 将内部的循环值与外部的循环值进行比较 注意内部的循环条件要比外部的循环条件往后一位 j=i+1 如果有相同的值 使用 splice() 方法删除j下标的值 删除一个
const arrOld = [1, 2, 2, 2, 3, 4, 5, 6, 6, 8, 8]
for (let i = 0; i < arrOld.length; i++) {
for (let j = i + 1; j < arrOld.length; j++) {
if (arrOld[i] == arrOld[j]) {
arrOld.splice(j, 1);
j--;//防止有多个相同的漏掉
}
}
}
console.log(arrOld);//[1, 2, 3, 4, 5, 6, 8]
2.for each 遍历数组 结合 indexof 去重
indexOf() 方法在数组中进行查找 返回第一次出现的指定内容在此数组中的索引
找不到返回 -1
思路:定义一个新的数组 利用indexOf特性将遍历的数组值在新数组中进行查找 若是返回值为-1 则添加到新数组中 这样就可以得到一个去重后的数组了
const arrOld = [1, 2, 3, 4, 5, 6, 6, 8, 8]
let delRepeat = arr => {
let newArr=[]
arr.forEach(item => {
if (newArr.indexOf(item) === -1) {
newArr.push(item)
}
});
console.log(newArr);
}
delRepeat(arrOld)//[1, 2, 3, 4, 5, 6, 8]
3.使用Set对数组去重
思路:使用ES6的新特性 set 。set 里面的值都是唯一的 可以利用set的唯一性和…扩展运算符对数组进行去重
const arrOld = [1, 2, 3, 4, 5, 6, 6, 8, 8]
let newArr=[...new Set(arrOld)]
console.log(newArr);//[1, 2, 3, 4, 5, 6, 8]
4.使用 includes()去重
思路:includes()方法,使用时,相当于indexOf(),查询成功返回true,失败返回false
const arrOld = [1, 2, 2, 2, 3, 4, 5, 6, 6, 8, 8]
let delRepeat = arr => {
let newArr = []
arr.forEach(item => {
if (!newArr.includes(item)) {
newArr.push(item)
}
});
console.log(newArr);
}
delRepeat(arrOld)//[1, 2, 3, 4, 5, 6, 8]
5.使用 fiter 去重
思路:filter 是对数组进行过滤的 返回一个符合条件的数组 可以利用indexOf 返回的值等于当前值的索引号作为条件 即可得到一个不重复的数组
const arrOld = [1, 2, 2, 2, 3, 4, 5, 6, 6, 8, 8]
let delRepeat = arr => {
return arr.filter((item, index) => {
return arr.indexOf(item) == index
})
}
console.log(delRepeat(arrOld));//[1, 2, 3, 4, 5, 6, 8]