我需要检查一个JavaScript数组,看看是否有任何重复的值。最简单的方法是什么?我只需要找到复制的值是什么——实际上我不需要它们的索引,也不需要它们复制了多少次。
我知道我可以循环遍历数组并检查所有其他值是否匹配,但似乎应该有更简单的方法。
类似的问题:
获取JavaScript数组中所有唯一的值(删除重复值)
我需要检查一个JavaScript数组,看看是否有任何重复的值。最简单的方法是什么?我只需要找到复制的值是什么——实际上我不需要它们的索引,也不需要它们复制了多少次。
我知道我可以循环遍历数组并检查所有其他值是否匹配,但似乎应该有更简单的方法。
类似的问题:
获取JavaScript数组中所有唯一的值(删除重复值)
当前回答
你可以使用排序、筛选和集合来做到这一点。
Var数= [1,2,3,4,5,6,7,8,1,2,3,4,5,3,4]; var numbersSorted = numbers.sort(); 令result = numbers。Filter ((e, i) => numbers[i] == numbers[i+1]); 结果=[…]新设置(结果)]; console.log(结果);
其他回答
快速和优雅的方式使用es6对象解构和减少
它在O(n)(对数组进行1次迭代)中运行,并且不会重复出现超过2次的值
const arr =['你好','嗨',“你好”,“再见”,“再见”,“自闭症”) const { dup } = arr.reduce( (acc, curr) => { acc。Items [curr] = acc。项目(咕咕叫)?acc。项目[curr] += 1: 1 如果(acc)。项目[curr] === 2) acc.dup.push(curr) 返回acc }, { 项目:{}, dup: [] }, ) console.log (dup) // ['hi', 'bye']
我认为下面是完成你要求的最简单和最快的O(n)方法:
function getDuplicates( arr ) {
var i, value;
var all = {};
var duplicates = [];
for( i=0; i<arr.length; i++ ) {
value = arr[i];
if( all[value] ) {
duplicates.push( value );
all[value] = false;
} else if( typeof all[value] == "undefined" ) {
all[value] = true;
}
}
return duplicates;
}
对于ES5或更高版本:
function getDuplicates( arr ) {
var all = {};
return arr.reduce(function( duplicates, value ) {
if( all[value] ) {
duplicates.push(value);
all[value] = false;
} else if( typeof all[value] == "undefined" ) {
all[value] = true;
}
return duplicates;
}, []);
}
function remove_dups(arrayName){
var newArray = new Array();
label:for(var i=0; i<arrayName.length; i++ ){
for(var j=0; j<newArray.length;j++ ){
if(newArray[j]==arrayName[i]){
continue label;
}
}
newArray[newArray.length] = arrayName[i];
}
return newArray;
}
在这里,每个dupe只输出一次副本。
Var arr = [9,9,9,9,111, 2,3,4,4,5,7]; arr.sort (); Var结果= []; For (var I = 0;我< arr。长度- 1;我+ +){ 如果(arr[i + 1] == arr[i]) { results.push (arr[我]); } } results = Array.from(new Set(results)) console.log(结果);
魔法
a.filter(( t={}, e=>!(1-(t[e]=++t[e]|0)) ))
O (n)的性能;我们假设你的数组在a中,它包含可以以唯一方式转换. tostring()的元素(这是由JS在t[e]中隐式完成的),例如numbers=[4,5,4], strings=["aa","bb","aa"], arraysNum=[[1,2,3],[43,2,3],[1,2,3]]。这里有解释,这里有唯一值
var a1 = [[2, 17], [2, 17], [2, 17], [1, 12], [5, 9], [1, 12], [6,2], [1, 12]]; var a2 =[“迈克”,“亚当”,“马特”、“南希”,“亚当”,“珍妮”,“南希”,“卡尔”); Var a3 = [5,6,4,9,2,3,5,3,4,1,5,4,9]; 让nd = (a) = > a.filter ((t = {}, e = > ! (1 - (t [e] = + + t [e] | 0)))) / /打印 let c= x => console.log(JSON.stringify(x)); C (nd(a1)); C (nd(a2)); C (nd(a3));