数组去重

2019-02-25  本文已影响0人  何喜同学

最近看各种面试题,其中去重是非常普遍的。我就写出其中一道题来记录一下去重的思路

创建一个数组,类似于 ['2','3','1'] ,内容是100位整数字符串,然后去重

let arr = [];
for(let i = 0;i<100;i++){
    let val = parseInt(Math.random()*10) + '';
    arr.push(val);
}

let obj = {},arr1=[];
for(let i = 0,len = arr.length;i<len;i++){
    if(obj[arr[i]]){
        obj[arr[i]].count++;
    }else {
        obj[arr[i]] = {'count':1,'val':arr[i]}
    }
}

for(item in obj){
    arr1.push(item)
}
console.log(arr1); // 这就是去重后的结果

上面这个引入 obj 这个参数的解法有一个好处就是,我可以算出 arr 数组中重复的元素有多少,已经其他你想知道的东西,缺点就是稍微麻烦一点。
这道题还有一个解法是

let i = arr.length-1,site;
while (i > 0){
    site = arr.lastIndexOf(arr[i],i-1);
    if(site > -1){
        arr.splice(site,1);
    }
    i--;
}
console.log(arr); // 这就是去重后的结果

我封装了一个增量的去重,也可以尝试一下

function distinct( arr){
    // 这是一个去重
    if(arr instanceof array){
        let i = 0, len ;
        while (i< arr.length-1){
            len = arr.indexOf(arr[i],i+1);
            if(len > 0){
                arr.splice(len,1)
            }else {
                i++
            }
        }
        return arr
    }else {
        console.log('传入的对象不是数组,改函数暂不支持')
    }
}
上一篇 下一篇

猜你喜欢

热点阅读