数组去重

79 阅读1分钟

双层for循环

let arr = [1,2,3,7,9,3,3,4,10,10,10,5,6,1,2,8,3];

for (let i = 0; i < arr.length; i++) {
    for (let j = i+1,len=arr.length; j < len; j++) {
        if ( arr[i] === arr[j] ) {
            arr.splice(j,1);
            j--;
            len--;
        }
    }
}

console.log(arr);                   // [1, 2, 3, 7, 9, 4, 10, 5, 6, 8]
console.log(arr.sort((a,b)=>a-b));  // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

使用双层for循环,用循环1的第( i )个和循环2的第( i+1 )个做比对,

每当第一个for循环执行一次,循环2执行 arr的长度减1次

当判断 第 arr的i 位置和 arr的j 位置 相等时,删除二次比对 arr内的j 位置

同时 j减一 和 len减一,因为arr数组删除了一位,需要更新循环次数

ES6 Set 去重

let arr = [1,2,3,7,9,3,3,4,10,10,10,5,6,1,2,8,3];

function arrFun(arr) {
    return Array.from(new Set(arr));
}

console.log([...new Set(arr)]);               // [1, 2, 3, 7, 9, 4, 10, 5, 6, 8]

console.log( arrFun(arr) );                   // [1, 2, 3, 7, 9, 4, 10, 5, 6, 8]

console.log(arrFun(arr).sort((a,b)=>a-b));    // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

数组 array.indexOf 去重

let arr = [1,2,3,7,9,3,3,4,10,10,10,5,6,1,2,8,3];
let res = [];

for (let i = 0; i < arr.length; i++) {
    if ( res.indexOf(arr[i]) === -1 ) {
        res.push(arr[i]);
    }
}

console.log(res);          // [1, 2, 3, 7, 9, 4, 10, 5, 6, 8]

循环 arr 数组 并 检测 res数组里面 有没有 数组第i个元素,没有就添加到数组,有就不添加。

递归调用 去重

需要将数据进行排序后才可以

let arr = [1,2,3,7,9,3,3,4,10,10,10,5,6,1,2,8,3];

function fun1(arr) {
    let arr1 = arr;
    let len = arr1.length;
    arr1.sort((a,b)=>a-b);

    function loop(i) {
        if ( i >= 1 ) {
            
            if ( arr1[i] === arr1[i-1] ) {
                arr1.splice(i,1);
            }
            loop(i-1);
        }
    }
    loop(len-1);
    return arr1;
}

console.log( fun1(arr) );    // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Array.filter 去重

function unique(arr) {
    var res = arr.filter(function(item, index, array) {
        return array.indexOf(item) === index
    })
    return res
}

indexOf 返回数组里第一次出现的位置

filter 该方法返回的是原始数组的一个子集