如何在添加之前检查特定对象是否已存在于数组中

新手上路,请多包涵

我有这个数组:

 [{"name": "Olvier", "id": 123 }, {"name": "Olvier", "id": 124 }]

现在我的目标是防止再次将相同的对象添加到数组中:

 {"name": "Olvier", "id": 123 }

有没有办法做到这一点?

原文由 olivier 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 280
2 个回答

如果你的对象是较早创建的并且与数组中的对象具有相同的引用,则可以使用 indexOf:

 var myObj = { a: 'b' };
myArray.push(myObj);
var isInArray = myArray.indexOf(myObj) !== -1;

否则你可以用 find 检查它:

 var isInArray = myArray.find(function(el){ return el.id === '123' }) !== undefined;

原文由 Camille Wintz 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以使用 Array#some 方法来确定该项目是否已经在数组中:

 var arr = [
  { name: 'Olvier', id: 123 },
  { name: 'Olvier', id: 124 }
];
var existingItem = arr[1];
var newItem = { name: 'John', id: 125 };

if (!arr.some(item => item === existingItem)) {
  arr.push(existingItem);
}
console.log(arr);

if (!arr.some(item => item === newItem)) {
  arr.push(newItem);
}
console.log(arr);

原文由 alexmac 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题