嗨我写了下面的代码
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);
}
但是,这给了我不需要的输出。请帮我纠正这个问题。这是小提琴。
嗨我写了下面的代码
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);
}
但是,这给了我不需要的输出。请帮我纠正这个问题。这是小提琴。
我不知道你的逻辑是什么,所以我构建了一个稍微不同的工作函数,试图让它尽可能清晰:
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;
}
它是一个包含大量用于操作数组的函数的库。
_.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