javascript - 关于 Javascript 数组 unique

标签 javascript arrays unique

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] 的行为也正确。

演示:http://jsfiddle.net/YE9jx/

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/

相关文章:

c - 以下使用涉及越界访问的指针算法的语句是否有效?

java - 读取/存储大量多维数据的最快方法? ( java )

从 R 中的单元格中删除重复的单词

jQuery:为每个匹配的元素提供唯一的 ID

google-sheets - 在非连续单元格上使用 TextJoin 和 Unique

javascript - toolbarCollapse 命令使 CKEDITOR 成为焦点

javascript - 使用单例设计模式以获得更好的代码质量

javascript - 如何在返回之前等待迭代完成

javascript - 检查 html 元素的数量然后运行函数

php - 将多维数组减少为查询字符串