数组去重,主要对数字型数组去重
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]));
//浏览器一直反应不过来??什么情况??请解释一下这个函数哪里有问题??
这个写代码风格有待改进,大括号不对齐、缩进不规则读起来不费劲么?。。
几个需要改正的地方:
indexOf
方法要在arr
上调用,像这样:arr.indexOf(num)
每次删除元素需要更新n的值
边界条件设置错误,应该是
i + 1 < n
而不是i < n
sort
默认会按升序排列,不用再加参数sort
函数就地修改值,而且你的代码里arr
和arr1
都指向了同一个内存地址,需要通过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;
}