JS重复数组输入方法错误

时间:2018-06-25 13:22:26

标签: javascript

我正在尝试将用户输入添加到数组中,如果用户输入重复值,则会引发错误警报。下面的方法对于重复项工作正常,但对于非重复值也会引发错误。我不明白为什么。它可能很简单,但我看不到。

addDIN(val) {
    var arr = this.din_require_list;
    if (arr.length == 0) {
      arr.push(val)
    }
    else if (arr.length > 0) {
      for (var i= 0; i < arr.length; i++) {
        if (val != arr[i]) {
          arr.push(val);
        } 
        else if(val == arr[i]){
          alert("duplicate entry");    
         arr.splice(i+1,1);
        }
      };
    };

  }

Img1Img2

3 个答案:

答案 0 :(得分:0)

使其更简单

function insertUnique(val){
  var arr = [];
  if(!arr.includes(val)){
    arr.push(val)
  }else{
    alert("Duplicate entry");
  }
}

Array.include检查该值在给定数组中是否存在。

请参阅此https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/includes

答案 1 :(得分:0)

您将推入数组但没有退出循环,因此循环将继续运行并匹配该值并引发错误,

您应该做的是分别运行for循环,并保留一个标志(如果该标志是否重复),并且如果找不到重复项,则将该元素添加到数组中

喜欢

  for (var i= 0; i < arr.length; i++) {
         if(arr[i]== val){
           dupeFound==1;
           console.log("duplicate")
           break;
          }
  }
  if(dupeFound!=1) array.push(val)

答案 2 :(得分:0)

at risk of being simplistic

why not?

var arr = [1,2,'c','dude what'];
var lookfor = 'dude';

    if(arr.indexOf(lookfor) != -1){
        console.log('dude string already exists on the array')
    }

Therefore

var arr = [1,2,'c','dude what'];

var add = 1;
if((arr.indexOf(add) == -1)?arr.push(add): false){
  console.log('added ',add);
}else{
  console.log(add,'already in array');
}

console.log(arr);