Nav*_*ida 108 javascript arrays unique
给定一个['0','1','1','2','3','3','3']数组,结果应该是['0','1','2','3'].
Ped*_* L. 257
编辑
ES6解决方案:
[...new Set(a)];
Run Code Online (Sandbox Code Playgroud)
替代方案:
Array.from(new Set(a));
Run Code Online (Sandbox Code Playgroud)
旧的回应.O(n ^ 2)(不要与大数组一起使用!)
var arrayUnique = function(a) {
return a.reduce(function(p, c) {
if (p.indexOf(c) < 0) p.push(c);
return p;
}, []);
};
Run Code Online (Sandbox Code Playgroud)
bea*_*mit 51
如果您想维持秩序:
arr = arr.reverse().filter(function (e, i, arr) {
return arr.indexOf(e, i+1) === -1;
}).reverse();
Run Code Online (Sandbox Code Playgroud)
由于没有内置的反向索引,我反转数组,过滤掉重复数据,然后重新反转它.
filter函数查找当前索引之后(在原始数组之前)元素的任何出现.如果找到一个,它会抛出这个元素.
编辑:
或者,您可以使用lastindexOf(如果您不关心订单):
arr = arr.filter(function (e, i, arr) {
return arr.lastIndexOf(e) === i;
});
Run Code Online (Sandbox Code Playgroud)
这将保留唯一元素,但仅限于最后一次出现.这意味着['0','1','0']变为['1','0'],而不是['0','1'].
小智 26
这是一个Array Prototype函数:
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;
};
Run Code Online (Sandbox Code Playgroud)
OhJ*_*eez 13
这是2014年的现在,时间复杂性仍然很重要!
array.filter(function() {
var seen = {};
return function(element, index, array) {
return !(element in seen) && (seen[element] = 1);
};
}());
Run Code Online (Sandbox Code Playgroud)
http://jsperf.com/array-filter-unique/13
function array_unique(arr) {
var result = [];
for (var i = 0; i < arr.length; i++) {
if (result.indexOf(arr[i]) == -1) {
result.push(arr[i]);
}
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
不是内置功能.如果产品列表不包含该项,请将其添加到唯一列表并返回唯一列表.
小智 6
你去!别客气!
Array.prototype.unique = function()
{
var tmp = {}, out = [];
for(var i = 0, n = this.length; i < n; ++i)
{
if(!tmp[this[i]]) { tmp[this[i]] = true; out.push(this[i]); }
}
return out;
}
var a = [1,2,2,7,4,1,'a',0,6,9,'a'];
var b = a.unique();
alert(a);
alert(b);
Run Code Online (Sandbox Code Playgroud)
function array_unique(nav_array) {
nav_array = nav_array.sort(function (a, b) { return a*1 - b*1; });
var ret = [nav_array[0]];
// Start loop at 1 as element 0 can never be a duplicate
for (var i = 1; i < nav_array.length; i++) {
if (nav_array[i-1] !== nav_array[i]) {
ret.push(nav_array[i]);
}
}
return ret;
}
Run Code Online (Sandbox Code Playgroud)