tp如何防止阵列中的重复

时间:2018-07-05 13:31:59

标签: javascript node.js

如下面发布的代码所示,每次调用函数func时,数组arr都会包含obj.name和obj.text。 我想知道的是,javascript中是否有建议的方法来防止数组多次具有相同的obj.name和obj.text?

注释:函数func包含对象obj,但实际上它具有两个以上的属性

请让我知道javascript中建议的方法,以防止重复输入数组 代码

  func(obj) {

  obj.name = name;
  obj.text = text;

  arr.push(obj);
  }

3 个答案:

答案 0 :(得分:2)

可能在新的答案中,您会得到最好的建议,但是您可以做的是

  func(obj) {

     obj.name = name;
     obj.text = text;

     var index = arr.findIndex(item => item.name === obj.name);
     if (index !== -1) {
       arr.splice(index, 1);
     }
     arr.push(obj);
  }

答案 1 :(得分:1)

您可以检查与现有对象的nametext匹配的数组对象。您可以使用

arr.find(item => item.name === obj.name && item.text === obj.text)

如果name数组中已经存在具有textarr值的对象,则返回一个对象。否则undefined

 func(obj) {

  obj.name = name;
  obj.text = text;
  var existingItem = arr.find(item => item.name === obj.name && item.text === obj.text);
    if(!existingItem){
      arr.push(obj);
    }
  }

答案 2 :(得分:-2)

为避免名称重复,请使用arr作为对象(也是,最好也更改其名称;)),然后将该名称用作键:

func(obj) {
  obj.name = name;
  obj.text = text;
  arr[name] = obj;
}

如果要避免名称和文本重复,可以使用相同的想法:

func(obj) {
  obj.name = name;
  obj.text = text;
  arr[name] = arr[name] || {};
  arr[name][text] = obj;
}

编辑:在这种情况下,arr将是一个对象,而不是数组。您将可以使用Object.keys

遍历其属性