Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript tp如何防止阵列中的重复_Javascript_Node.js - Fatal编程技术网

Javascript tp如何防止阵列中的重复

Javascript tp如何防止阵列中的重复,javascript,node.js,Javascript,Node.js,如下面发布的代码所示,数组arr将在每次调用函数func时包含obj.name和obj.text。 我想知道的是,javascript中是否有一种推荐的方法来防止数组多次使用相同的obj.name和obj.text 注意:函数func包含对象obj,但实际上它有两个以上的属性 请让我知道javascript中防止数组重复条目的推荐方法 代码 func(obj) { obj.name = name; obj.text = text; arr.push(obj); } 为避

如下面发布的代码所示,数组arr将在每次调用函数func时包含obj.name和obj.text。 我想知道的是,javascript中是否有一种推荐的方法来防止数组多次使用相同的obj.name和obj.text

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

请让我知道javascript中防止数组重复条目的推荐方法 代码

  func(obj) {

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

  arr.push(obj);
  }

为避免名称重复,请将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将是一个对象而不是数组。您可以使用

遍历其属性。您可以检查数组中与现有对象的
名称
文本
匹配的对象。你可以用

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

如果
arr
数组else
未定义的
中已经存在具有
名称
文本
值的对象,它将返回一个对象

 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);
    }
  }

也许在新的答案中你会得到最好的建议,但你能做的是

  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);
  }

复制什么?只有名字、名字和文字?名字和文字从哪里来?是否确实要修改
obj
?请使用
Map
对象,而不是将要避免重复的项作为键的数组。添加完所有项目后,如果需要,您可以从映射对象获取数组。只有整数可以用作访问元素的数组键。如果使用字符串,数组将获得一个具有该值的属性,但该属性不会包含在数组的元素中。确实如此,它将是一个具有属性的对象,但仍然可以避免重复。当将数组作为对象使用时,为什么要使用它呢?这完全令人困惑!您的最后一行生成了一个错误,因为
arr[name]
未定义。谢谢您,更改了代码,使其正常工作。还精确到我们将使用对象而不是数组。我相信这里的重点是删除重复项,这样的对象在我看来更好。