可能重复:
Easiest way to find duplicate values in a JavaScript array
我想找出一个数组中两个值是否相同。我写了以下代码:
function validatePassTimeFields(passtimes) {
var success = true;
var length = passtimes.length;
var hashMap = new Object();
for (var j=0; j<length; j++) {
if(hashMap[passtimes[j].value]==1) {
success = false;
alert("Duplicate Found");
break;
}
hashMap[passtimes[j].value]=1;
}
return success;
}
我是Javascript的新手,所以我尝试使用HashMap来查找是否有任何重复。它是在JavaScript中找到重复的最佳方式吗?或者我可以优化它?
答案 0 :(得分:1)
//如果你想在其他地方使用它,你只需要优化它 -
function noduplicates(array){
var next, O= {},
L= array.length;
while(L){
next= array[--L];
if(O[next]) return false;
O[next]= 1;
}
return true;
}
function validatePassTimeFields(passtimes){
if (noduplicates(passtimes)) return true;
alert("Duplicate Found");
return false;
}
答案 1 :(得分:1)
你的功能已经非常好了,除了它只适用于带字符串或数字的数组的问题。对于关于对象的更加困难的关注方法,请参阅this answer。我不认为这对您很重要,因为您有明确且受限制的用例(通过value
属性检查身份)。
然而,我会做一些不同的观点:
success
变量和break
,而应使用整个函数中的return
。new Object
而不是构造函数{}
hashMap
,而不是将1
中的值设置为true
。你也可以省略等于运算符==
,只检查属性的真实性。我甚至会使用in
operator。function validatePassTimeFields(passtimes) {
var length = passtimes.length;
var hashMap = {};
for (var j=0; j<length; j++) {
if (passtimes[j].value in hashMap) {
alert("Duplicate Found");
return false;
}
hashMap[passtimes[j].value] = 1;
}
return true;
}
答案 2 :(得分:0)
您似乎不想找到重复项,只是为了查看是否有?
你非常接近,这是一个有效的功能;
var hasDuplicates = function (arr) {
var _store = {};
for (var i = 0; i < arr.length; i++) {
if (typeof _store["_" + arr[i]] !== "undefined") {
return true;
}
_store["_" + arr[i]] = true;
}
return false;
};
关联数组中的下划线是存储数值所必需的。 hasDuplicates()
函数仅适用于具有toString()
方法的对象。
检查重复项;
var yourArray = [1, 5, 7, 3, 5, 6];
if (hasDuplicates(yourArray)) {...
答案 3 :(得分:0)
可能值得查看下划线对此功能的实现。如果您只想消除欺骗,可以使用_.uniq(),但如果您只是想知道有欺骗或纯粹的实施细节,您可能会喜欢查看source of this method,非常好的记录。
我知道这不是这个问题的直接代码答案 - 这里已经有一些答案,所以重复这个问题没有用。但我认为值得一提的是,下划线是一个很棒的实用程序库,源代码是一个学习更好的javascript的好地方。