我有一个非常简单的JavaScript数组,可能包含也可能不包含重复项。
var names = ["Mike","Matt","Nancy","Adam","Jenny","Nancy","Carl"];
我需要删除重复项并将唯一值放入新数组。
我可以指出我尝试过的所有代码,但我认为它们没有用,因为它们不起作用。我也接受jQuery解决方案。
类似的问题:
获取数组中的所有非唯一值(即:重复/多次出现)
我有一个非常简单的JavaScript数组,可能包含也可能不包含重复项。
var names = ["Mike","Matt","Nancy","Adam","Jenny","Nancy","Carl"];
我需要删除重复项并将唯一值放入新数组。
我可以指出我尝试过的所有代码,但我认为它们没有用,因为它们不起作用。我也接受jQuery解决方案。
类似的问题:
获取数组中的所有非唯一值(即:重复/多次出现)
当前回答
像这样使用Array.filter()
var actualArr=[苹果',苹果',香蕉',芒果',草莓',香蕉];console.log('实际数组:'+actualArr);var filteredArr=actualArr.filter(函数(项,索引){if(actualArr.indexOf(item)==索引)退货项目;});console.log('FilteredArray:'+filtedArr);
这可以在ES6中缩短到
actualArr.filter((item,index,self) => self.indexOf(item)==index);
下面是Array.filter()的详细解释
其他回答
如果你在使用
D3.js
你可以的
d3.set(["foo", "bar", "foo", "baz"]).values() ==> ["foo", "bar", "baz"]
https://github.com/mbostock/d3/wiki/Arrays#set_values
我知道我有点晚了,但这里有另一个使用jinqJ的选项
参见Fiddle
var result = jinqJs().from(["Mike","Matt","Nancy","Adam","Jenny","Nancy","Carl"]).distinct().select();
使用本机javascript函数从数组中删除重复项的最简洁方法是使用以下序列:
vals.sort().reduce(function(a, b){ if (b != a[0]) a.unshift(b); return a }, [])
在reduce函数中不需要slice或indexOf,就像我在其他示例中看到的那样!将其与过滤器功能一起使用是有意义的,尽管:
vals.filter(function(v, i, a){ return i == a.indexOf(v) })
ES6(2015)的另一种方法是:
Array.from(new Set(vals))
或者甚至使用扩展运算符:
[...new Set(vals)]
干杯
这里是另一种使用jQuery的方法,
function uniqueArray(array){
if ($.isArray(array)){
var dupes = {}; var len, i;
for (i=0,len=array.length;i<len;i++){
var test = array[i].toString();
if (dupes[test]) { array.splice(i,1); len--; i--; } else { dupes[test] = true; }
}
}
else {
if (window.console) console.log('Not passing an array to uniqueArray, returning whatever you sent it - not filtered!');
return(array);
}
return(array);
}
作者:William Skidmore
您只需在JavaScript中使用filter方法的第二个-index参数即可:
var a = [2,3,4,5,5,4];
a.filter(function(value, index){ return a.indexOf(value) == index });
或在短手
a.filter((v,i) => a.indexOf(v) == i)