将对象推送到对象数组中,但前提是对象属性是唯一的

时间:2019-04-15 17:03:24

标签: javascript arrays

我想要的是将所有对象从arrayToPush推入数组,但只有那些具有不同ID的对象。因此,在这种情况下,我想拥有一个ID为111,222,333,444,555的数组,并且不要在ID为333的arrayToPush中推送对象。我该如何实现?预先感谢

var array = [
   {title: 'Something', id: 111},
   {title: 'Something 2', id: 222},
   {title: 'Something 3', id: 333}
]

var arrayToPush = [
   {title: 'Something 4', id: 333},
   {title: 'Something 5', id: 444},
   {title: 'Something 6', id: 555}
]

for(var i = 0; i < arrayToPush.length; i++) {
   array.push(arrayToPush[i])
}

3 个答案:

答案 0 :(得分:2)

一种方法是过滤ArrayToPush以消除现有元素,然后使用散布运算符将它们联系:

var array = [
  { title: "Something", id: 111 },
  { title: "Something 2", id: 222 },
  { title: "Something 3", id: 333 }
];

var arrayToPush = [
  { title: "Something 4", id: 333 },
  { title: "Something 5", id: 444 },
  { title: "Something 6", id: 555 }
];

var filtered = arrayToPush.filter(a => !array.find(b => b.id === a.id));

var result = [...array, ...filtered];

console.log(result);

答案 1 :(得分:1)

您可以遍历arrayToPush并使用array.find()检查对象是否存在于数组中

GLabel

答案 2 :(得分:1)

首先,您需要知道数组中的哪些ID:

const arrayIds =  array.map(({ id }) => id); // [111, 222, 333]

然后,您需要过滤 arrayToPush ,以便遍历 arrayToPush 并过滤那些不包含在 array 中的内容:< / p>

const filteredArrayToPush = arrayToPush.filter(({ id }) => !arrayIds.includes(id));

然后连接两个数组 array filteredArrayToPush

array = [...array, ...filteredArrayToPush];