数组去重
function func(arr){
var res = [arr[0]];
for(var i = 1; i < arr.length; i++)
for(var j = 0; j < res.length; j++)
if(arr[i] == res[j])
break;
else
res.push(arr[i]);
return res;
}
var arr = [1, 1,2,2,3]
alert(func(arr));//1,2,2,3,3,3??为什么会这样?应该是1,2,3啊
你主要是把内外层
for
的逻辑搞混淆了,内层主要是找有没有重置,外层才应该处理是否push
。更建议把内外层分开
当然既然这样分开了,上面的
find
就可以直接用原生函数Array.prototype.indexOf
代替了如果想省事的话可以使用 lodash的 union 函数
自己写可以参考下面的代码
逻辑有问题~~~
不管哪种程序,尽量避免在循环自身的时候,还去更改自身内容,特别是去增删元素。
另外,那个写法效率不行,展示一下ES6的实现吧:
function func(arr){
这是你要的去重
至于为啥你写的不行,上面已经有人给出答案了
最简单的改法: