如何在Javascript中搜索数组?

时间:2012-10-04 17:18:20

标签: javascript

  

可能重复:
  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中找到重复的最佳方式吗?或者我可以优化它?

4 个答案:

答案 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的好地方。