var arr1 = [12,'ss','sdd','sdd','kk'];
function unique(array){
var o = {},b = [];
for(var i=0;i<array.length;i++){
if(!o[array[i]]){
b.push(array[i]);
o[array[i]] = true;
}
}
return b;
}
unique(arr1) //It works fine .output [12,'ss','sdd','kk']
but,it has some issues on arr2 below:
var arr2 = [12,'ss','sdd','sdd','kk','12'];//output [12,'ss','sdd','kk']
它会出错吗?我认为它应该输出 [12,'ss','sdd','kk','12'],我们可以解决这个问题吗?
最佳答案
键名总是被转换成字符串。我建议使用 Array.prototype.indexOf
来检查数组条目是否唯一。 indexOf
方法对于对象[1]
的行为也正确。
function unique(array){
var b = [];
for(var i=0; i<array.length; i++){
if(b.indexOf(array[i]) == -1) b.push(array[i]);
}
return b;
}
[1]
正确的行为是:如果对象引用不同则不同:
var obj1 = [1,2];
var obj2 = [1,2];
unique([obj1, obj2]); //[[1,2], [1,2]] // Because they're different arrays
unique([obj1, obj1]); //[[1,2]] // Because both elements are obj1
关于javascript - 关于 Javascript 数组 unique,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8544013/