获取 JavaScript 数组中的所有唯一值(删除重复项)

41 浏览
0 Comments

获取 JavaScript 数组中的所有唯一值(删除重复项)

我有一个数字数组,需要确保这些数字是唯一的。我在互联网上找到了下面的代码片段,它在数组中不包含零时运行得很好。我在 Stack Overflow 上找到了 这个脚本,它看起来几乎完全相同,但却没有出现问题。

因此,为了帮助我学习,能否有人帮我确定原型脚本出了什么问题?

Array.prototype.getUnique = function() {
 var o = {}, a = [], i, e;
 for (i = 0; e = this[i]; i++) {o[e] = 1};
 for (e in o) {a.push (e)};
 return a;
}

来自重复问题的更多答案:

类似的问题:

admin 更改状态以发布 2023年5月25日
0
0 Comments

ES6/ES2015 的更新答案:使用 Set扩展运算符(感谢 le-m),单行解决方案是:

let uniqueItems = [...new Set(items)]

它返回

[4, 5, 6, 3, 2, 23, 1]

0
0 Comments

在 JavaScript 1.6 / ECMAScript 5 中,您可以使用数组的本地filter方法,以以下方式获取具有唯一值的数组:

function onlyUnique(value, index, array) {
  return self.indexOf(value) === index;
}
// usage example:
var a = ['a', 1, 'a', 2, '1'];
var unique = a.filter(onlyUnique);
console.log(unique); // ['a', 1, 2, '1']

本地方法filter将循环遍历数组,并仅保留通过给定回调函数onlyUnique的条目。

onlyUnique检查给定值是否是第一个出现的。如果不是,它必须是重复项,将不会被复制。

此解决方案无需使用任何额外的库,例如jQuery或prototype.js。

它也适用于具有混合值类型的数组。

对于不支持本地方法filterindexOf的旧浏览器(filter和indexOf

如果你想保留一个值的最后一次出现,只需用lastIndexOf替换indexOf

在ES6中,这可以缩短为:

// usage example:
var myArray = ['a', 1, 'a', 2, '1'];
var unique = myArray.filter((value, index, array) => array.indexOf(value) === index);
console.log(unique); // unique is ['a', 1, 2, '1']

感谢Camilo Martin在评论中提供的提示。

ES6具有原生对象Set来存储唯一值。现在可以使用以下方式获取具有唯一值的数组:

var myArray = ['a', 1, 'a', 2, '1'];
let unique = [...new Set(myArray)];
console.log(unique); // unique is ['a', 1, 2, '1']

Set的构造函数采用可迭代对象,如数组,展开运算符...将集合转换回数组。感谢Lukas Liese在评论中提供的提示。

0