-6

嗨我写了下面的代码

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);
}

但是,这给了我不需要的输出。请帮我纠正这个问题。是小提琴。

4

2 回答 2

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;
}
于 2012-06-29T11:54:58.337 回答
0

使用Underscore.js

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

_.uniq

_.uniq(array, [isSorted], [iterator]) 别名:unique 生成数组的无重复版本,使用 === 来测试对象是否相等。如果您事先知道数组已排序,则为 isSorted 传递 true 将运行更快的算法。如果要基于转换计算唯一项,请传递迭代器函数。

例子

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

于 2012-06-29T12:13:22.867 回答