一尘不染

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

javascript

我有一组数字,我需要确保它们是唯一的。我在互联网上找到了下面的代码片段,它工作得很好,直到数组中有一个零。

所以为了帮助我学习,有人可以帮我确定原型脚本哪里出错了吗?

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

阅读 184

收藏
2022-02-09

共1个答案

一尘不染

使用JavaScript 1.6 / ECMAScript 5,您可以通过filter以下方式使用 Array 的本机方法来获取具有唯一值的数组:

function onlyUnique(value, index, self) {
  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 或原型.js)即可工作。

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

对于不支持本机方法的旧浏览器 (<ie9),filter您可以在 MDN 文档中找到filterindexOfindexOf的变通方法。

如果要保留最后一次出现的值,只需替换indexOflastIndexOf.

使用 ES6,这可以缩短为:

// usage example:
var myArray = ['a', 1, 'a', 2, '1'];
var unique = myArray.filter((v, i, a) => a.indexOf(v) === i);

console.log(unique); // unique is ['a', 1, 2, '1']

ES6 有一个本地对象Set来存储唯一值。要获取具有唯一值的数组,您现在可以这样做:

var myArray = ['a', 1, 'a', 2, '1'];

let unique = [...new Set(myArray)];

console.log(unique); // unique is ['a', 1, 2, '1']

的构造函数Set接受一个可迭代对象,如数组,扩展运算符...将集合转换回数组。

2022-02-09