JavaScript:检测数组中的重复元素

时间:2014-05-16 17:31:13

标签: javascript arrays

我有一个小脚本,可以检测表单上字段数组中的重复元素。

function dupes() {
    var unique = [];
    //Loop through array of fields to get entered values
    for (i = 0; i <= 9; i++) {
        unique[i] = Number(document.getElementById('proj' + i).value);
    }
    unique.sort();
    //Now compare the array values. If there are any duplicates, throw an error
    for (i = 1; i <= 9; i++) {
        if (unique[i] == unique[i - 1]) {
            document.getElementById('errormsg').innerHTML = 'duplicated values!';
            return false;
        }
    }
}

其中有十个&#34; proj&#34; fields(proj0 - proj9),我有一个onClick事件被分配来调用这个函数。如果有任何重复值,则跨度&#39; errormsg&#39;应该显示错误,但它不起作用。我可能会缺少什么?

2 个答案:

答案 0 :(得分:1)

//Check for duplicate project numbers
function errorCheck() {
    var unique = [];
    //Loop through array of fields to get entered values
    for (i = 0; i <= 9; i++) {
        var currentValue = Number(document.getElementById('projNo' + i).value);
        if(unique.indexOf(currentValue)!=-1)
        {
            document.getElementById('projError').innerHTML = 'duplicated values!';
            return false;
        }
        unique[i]=currentValue;
    }
    return true;
}

FiddleDEMO

首先使用unique.indexOf(currentValue)检查数组中是否已有值。此函数返回搜索到的元素的索引,如果未找到则返回-1。 如果找不到,则将其添加到数组并转到下一个。

修改

如果您想在重新提交时重置错误消息并且没有更多重复项,请不要忘记在return true;之前重置错误消息:

document.getElementById('projError').innerHTML = 'no duplicates ;)';

答案 1 :(得分:0)

这将检测重复值:

  var arr= [];
    //Loop through array of fields to get entered values
    for (i = 0; i <= 9; i++) {
        arr.push(Number(document.getElementById('proj' + i).value));
    }

function dupes(arr) { // pass the array to find dupes
  var i, len=arr.length,  unique= [], obj={};

  for (i=0;i<len;i++) {
    obj[arr[i]]=0;
  }
  for (i in obj) {
    unique.push(i);
  }
  if(unique.length != arr.length) {
      document.getElementById('errormsg').innerHTML = 'duplicated values!';
  }
}

dupes(arr);