几种数组去重的方式

217 阅读1分钟

 一、利用数组的sort

// 初始化一个数组
const arr = [1,2,4,5,1,3,4,2,8,8,8,9,7,7,7,5,6,6,6];
// 对数组进行排序
const newArr = arr.sort(function(a,b){return a-b;});
//  循环遍历排序后的数组
 for (let i = 0; i<newArr.length; i++) {
    // 判断当前值和下一个值是否相等
    if (newArr[i] === newArr[i+1]) {
        // 如果相同就删除一个
        newArr.splice(newArr[i+1], 1);
        // 同时下标需要发生变化
        i--;
    }
}
console.log(newArr);

运行结果:


二、利用对象属性唯一特性

// 初始化数组
const arr = [3,12,2,3,42,53,1,8,5,8,5,7,6,4,3,1,2];
// 初始化一个空对象
const obj = {};
// 遍历数组的每一项,将值作为对象的属性
for (let i = 0; i<arr.length; i++) {
    obj[arr[i]] = 0;
}
// 创建新数组,接受去重后的值
const newArr = [];
for (let key in obj){
    // for in 循环遍历对象的每一个属性,得到的属性值为字符串,需要转化为数字
    // 将每一项值添加到新数组中
    newArr.push(+key);
}
console.log(newArr);

运行结果:


三、利用set集合的值不唯一性

const arr = [1,2,3,4,1,2,3,4,6,7,2];
console.log([...new Set(arr)]);

输出:


四、利用indexOf查找下标

let arr =  [1,3,2,4,23,3,1,2,4,8,5,8];
let newArr = [];
for (let i = 0; i < arr.length; i++){
    // 通过i判断数组中每一项出现的位置
    if (arr.indexOf(arr[i]) == i) {
        newArr.push(arr[i]);
    }
}
console.log(newArr);

输出: