我需要检查一个JavaScript数组,看看是否有任何重复的值。最简单的方法是什么?我只需要找到复制的值是什么——实际上我不需要它们的索引,也不需要它们复制了多少次。
我知道我可以循环遍历数组并检查所有其他值是否匹配,但似乎应该有更简单的方法。
类似的问题:
获取JavaScript数组中所有唯一的值(删除重复值)
我需要检查一个JavaScript数组,看看是否有任何重复的值。最简单的方法是什么?我只需要找到复制的值是什么——实际上我不需要它们的索引,也不需要它们复制了多少次。
我知道我可以循环遍历数组并检查所有其他值是否匹配,但似乎应该有更简单的方法。
类似的问题:
获取JavaScript数组中所有唯一的值(删除重复值)
当前回答
在这篇文章是有用的重复检查,如果你正在使用Jquery。
如何使用jquery在数组中找到重复项
var unique_values = {}; var list_of_values = []; $('input[name$="recordset"]'). each(function(item) { if ( ! unique_values[item.value] ) { unique_values[item.value] = true; list_of_values.push(item.value); } else { // We have duplicate values! } });
其他回答
最快的解决方法是用一面旗子
Var值= [4,2,3,1,4] / /解决方案 const checkDuplicate = list => { var hasDuplicate = false; list.sort()。排序((a, b) => { if (a == b) hasDuplicate = true }) 返回hasDuplicate } console.log (checkDuplicate(值))
var a= [1, 2,2,3,3,4,4,4];
var m=[];
var n = [];
a.forEach(function(e) {
if(m.indexOf(e)=== -1) {
m.push(e);
}else if(n.indexOf(e)=== -1){
n.push(e);
}
});
我认为下面是完成你要求的最简单和最快的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 GetDuplicates(arr) {
var i = 0, m = [];
return arr.filter(function (n) {
return !m[n] * ~arr.indexOf(n, m[n] = ++i);
});
}
以O(n)时间复杂度(不排序)求解上述问题。
var arr = [9, 9, 111, 2, 3, 4, 4, 5, 7];
var obj={};
for(var i=0;i<arr.length;i++){
if(!obj[arr[i]]){
obj[arr[i]]=1;
} else {
obj[arr[i]]=obj[arr[i]]+1;
}
}
var result=[]
for(var key in obj){
if(obj[key]>1){
result.push(Number(key)) // change this to result.push(key) to find duplicate strings in an array
}
}
console.log(result)