繁体   English   中英

使用JavaScript将唯一对象插入对象数组?

[英]Inserting unique objects into array of objects using javascript?

我正在执行对一组对象的推送操作。 我的代码如下所示,

var obj = {"id":1, "fname":"john", "lname":"doe"};
var userArray = [{
   "id": 1,
   "fname": "john",
   "lname": "doe"
}, {
   "id": 2,
   "fname": "john",
   "lname": "doe"
}];

userArray.forEach(function (element) {
   if(element.id !== obj.id) {
      userArray.push(obj);
   }
});

console.log(userArray);

当我对已经包含要推送的对象的userArray进行推送操作时(从代码中是var obj = {"id":1, "fname":"john", "lname":"doe"}; )在第二遍for循环中将其推送到数组。

预期的输出应该是userArray = [{"id": 1,"fname": "john","lname": "doe"}, {"id": 2, "fname": "john","lname": "doe"}];

但我得到userArray = [{"id": 1,"fname": "john","lname": "doe"}, {"id": 2, "fname": "john","lname": "doe"}, {"id": 1,"fname": "john","lname": "doe"}];

如何仅将唯一对象推送到数组?

使用数组.some方法检查列表中是否已存在具有该ID的项目。 如果没有,则推入数组:

 var obj = {"id":1, "fname":"john", "lname":"doe"}; var userArray = [{ "id": 1, "fname": "john", "lname": "doe" }, { "id": 2, "fname": "john", "lname": "doe" }]; var existing = userArray.some(element => element.id === obj.id); if(!existing) { userArray.push(obj); } console.log(userArray); 

您需要搜索具有相同ID的用户,如果该用户不存在,则可以添加它。 您需要先遍历整个数组以检查所有元素。

var obj = {"id":3, "fname":"john", "lname":"doe"};
var userArray = [{
   "id": 1,
   "fname": "john",
   "lname": "doe"
}, {
   "id": 2,
   "fname": "john",
   "lname": "doe"
}];

/*Search for an user with the same id*/
var found = userArray.find(function(user) {
  return user.id == obj.id;
});

/*Add the user if not found*/
if(!found){
   userArray.push(obj); 
}

我看到两种可能的解决方案:

1)检查id是否不存在。

var exists = false;
userArray.forEach(function (element) { // n/2 checks on average
  if(element.id == obj.id) {           // (this specific awful code, always n checks)
    exists = true;
  }
});
if (!exists) {
  userArray.push(obj);
}

这段代码(或任何改进的基于循环的版本)每次都会迭代数组,这就是为什么我更喜欢第二种选择的原因。

2)使userArray成为id为索引的对象。

var obj = {"id":1, "fname":"john", "lname":"doe"};
var userArray = {
  1: {
    "id": 1,
    "fname": "john",
    "lname": "doe"
  },
  2: {
    "id": 2,
    "fname": "john",
    "lname": "doe"
  }
};

if (typeof userArray[obj.id] === 'undefined') { // always 1 check
  userArray[obj.id] = obj;
}

console.log(userArray);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM