给定一个['0','1','1','2','3','3','3']
数组,结果应该是['0','1','2','3']
。
如何从 JavaScript 中包含重复项的数组中获取唯一值数组?
IT技术
javascript
arrays
unique
2021-02-01 06:47:11
6个回答
已编辑
ES6解决方案:
[...new Set(a)];
选择:
Array.from(new Set(a));
旧回复。O(n^2)(不要在大数组中使用它!)
var arrayUnique = function(a) {
return a.reduce(function(p, c) {
if (p.indexOf(c) < 0) p.push(c);
return p;
}, []);
};
如果你想维持秩序:
arr = arr.reverse().filter(function (e, i, arr) {
return arr.indexOf(e, i+1) === -1;
}).reverse();
由于没有内置的反向索引,我反转数组,过滤掉重复项,然后重新反转它。
filter 函数查找当前索引之后(原始数组中的之前)元素的任何出现。如果找到一个,它会抛出这个元素。
编辑:
或者,您可以使用 lastindexOf(如果您不关心订单):
arr = arr.filter(function (e, i, arr) {
return arr.lastIndexOf(e) === i;
});
这将保留唯一元素,但仅保留最后一次出现的元素。这意味着 ['0', '1', '0'] 变成了 ['1', '0'],而不是 ['0', '1']。
这是一个数组原型函数:
Array.prototype.unique = function() {
var unique = [];
for (var i = 0; i < this.length; i++) {
if (unique.indexOf(this[i]) == -1) {
unique.push(this[i]);
}
}
return unique;
};
带下划线
_.uniq([1, 2, 1, 3, 1, 4]); //=> [1, 2, 3, 4]
现在是 2014 年,伙计们,时间复杂度仍然很重要!
array.filter(function() {
var seen = {};
return function(element, index, array) {
return !(element in seen) && (seen[element] = 1);
};
}());
其它你可能感兴趣的问题