首页 > 数组去重的函数把浏览器给整蒙了?怎么办

数组去重的函数把浏览器给整蒙了?怎么办

数组去重,主要对数字型数组去重

function func(arr)
{if(arr.every(function(elem){return typeof elem=='number'}))
var arr1=arr.sort(function(a,b){return a-b;});//存储排序后的数组

for(var i=0,n=arr1.length;i<n;i++)    
    while(arr1[i]==arr1[i+1])
    {arr1.splice(i+1,1);
    arr.splice(arr.indexOf(arr1[i+1]),1);
    }
return arr;    
    }
alert(func([1, 1,2,2,3]));

//浏览器一直反应不过来??什么情况??请解释一下这个函数哪里有问题??


这个写代码风格有待改进,大括号不对齐、缩进不规则读起来不费劲么?。。

几个需要改正的地方:

  1. indexOf方法要在arr上调用,像这样:arr.indexOf(num)

  2. 每次删除元素需要更新n的值

  3. 边界条件设置错误,应该是i + 1 < n而不是i < n

  4. sort默认会按升序排列,不用再加参数

  5. sort函数就地修改值,而且你的代码里arrarr1都指向了同一个内存地址,需要通过arr.slice(0)深度拷贝一下。

下面修改之后运行正常了。

function func(arr) {
    if(arr.every(function(elem){return typeof elem=='number'})) {
        var arr1 = arr.slice(0);
        arr1.sort();
        for(var i=0,n=arr1.length;i + 1<n;i++) {
            while(i + 1 < n && arr1[i] == arr1[i + 1]) {
                arr1.splice(i+1,1);
                --n;
                arr.splice(arr.indexOf(arr1[i]),1);
            }
        }
    }
    return arr;
}
【热门文章】
【热门文章】