删除数组中的重复项,为什么此代码不起作用

时间:2012-06-29 11:53:25

标签: javascript

您好我已写下面的代码

function unique(th){
   var obj = {};
   for(var i = 0, n = th.length; i < n ; i++){
       obj[th[i]] = th[i];
   }    
   obj.length = n ;
   return Array.prototype.slice.call(obj);
}

但是,这给了我不必要的输出。请帮我纠正一下。 here是小提琴。

2 个答案:

答案 0 :(得分:1)

我不知道你的逻辑是什么,所以我建立了一个稍微不同且有效的功能,试图让它尽可能清晰:

function unique(th){
   var yetseen = {};
   var newarray = [];
   for(var i = 0, n = th.length;  i < n ; i++){
       var val = th[i];
       if (!yetseen[val]) {
           yetseen[val] = true;
           newarray.push(val);
       }
   }    
   return newarray;
}

答案 1 :(得分:0)

使用Underscore.js

它是一个包含许多用于操作数组的函数的库。

_.uniq

  

_.uniq(array,[isSorted],[iterator])别名:unique生成一个   无重复版本的数组,使用===来测试对象   平等。如果您事先知道数组已排序,则传递   对于isSorted,运行更快的算法。如果你想   根据转换计算唯一项,传递迭代器   功能

Example

alert(_.uniq([2,2,1,4,5,6,2,9,1,1,6,3,2,1,9,6,4], false)​);​ //yields 2,1,4,5,6,9,3