首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用对象数组更新对象数组

使用对象数组更新对象数组
EN

Stack Overflow用户
提问于 2020-06-17 04:28:38
回答 5查看 44关注 0票数 0

如果之前已经解决了这个问题,我很抱歉,但我无法让它与我发现的任何东西一起工作。

假设我有两个数组-- arr1arr2。如果属性idarr1arr2中匹配,我希望更新arr1中的对象。存在于arr2中但不存在于arr1中的对象-意味着属性idarr1中不存在-应该被推送到arr1

示例:

代码语言:javascript
复制
let arr1 = [
  {id: 0, name: "John"},
  {id: 1, name: "Sara"},
  {id: 2, name: "Domnic"},
  {id: 3, name: "Bravo"}
]

let arr2 = [
  {id: 0, name: "Mark"},
  {id: 4, name: "Sara"}
] 

# Expected Outcome

let outcome = [
  {id: 0, name: "Mark"},
  {id: 1, name: "Sara"},
  {id: 2, name: "Domnic"},
  {id: 3, name: "Bravo"},
  {id: 4, name: "Sara"}
] 
EN

回答 5

Stack Overflow用户

发布于 2020-06-17 04:37:51

您可以使用reducefind来执行以下操作:

代码语言:javascript
复制
const arr1 = [
  {id: 0, name: "John"},
  {id: 1, name: "Sara"},
  {id: 2, name: "Domnic"},
  {id: 3, name: "Bravo"}
];

const arr2 = [
  {id: 0, name: "Mark"},
  {id: 4, name: "Sara"}
];

arr2.reduce((res, item) => {
  const existingItem = res.find(x => x.id === item.id);
  if (existingItem) { existingItem.name = item.name; }
  else { res.push(item); }
  return res;
}, arr1);

console.log(arr1);

票数 1
EN

Stack Overflow用户

发布于 2020-06-17 04:38:40

你可以这样做:

代码语言:javascript
复制
 let arr1 = [
      {id: 0, name: "John"},
      {id: 1, name: "Sara"},
      {id: 2, name: "Domnic"},
      {id: 3, name: "Bravo"}
    ]

    let arr2 = [
      {id: 0, name: "Mark"},
      {id: 4, name: "Sara"}
    ] 
    
    var res = arr1.reduce((acc, elem)=>{
       var x = arr2.find(i=>i.id === elem.id);
       
       if(x){
          acc.push(x)
       }else{
         acc.push(elem)
       }
       return acc
    }, []);
    
    console.log(res)

票数 1
EN

Stack Overflow用户

发布于 2020-06-17 04:38:55

假设您想要更改arr1中的对象,而不是创建新的对象,一种方法是使用for...of迭代arr2中的对象,然后使用Array.prototype.find()检查arr1中是否已经存在具有相同id的对象

如果有的话,你可以用Object.assign.

  • Otherwise,来改变它,将新的对象推送到arr1

上。

代码语言:javascript
复制
const arr1 = [
  { id: 0, name: 'John' },
  { id: 1, name: 'Sara' },
  { id: 2, name: 'Domnic' },
  { id: 3, name: 'Bravo' },
];

const arr2 = [
  { id: 0, name: 'Mark', sometingElse: 123 },
  { id: 2, foo: 'bar' },
  { id: 4, name: 'Sara' },
];

for (const currentElement of arr2) {
  let previousElement = arr1.find(el => el.id === currentElement.id);
  
  if (previousElement) {
    Object.assign(previousElement, currentElement);
  } else {
    arr1.push(currentElement);
  }
}

console.log(arr1);
代码语言:javascript
复制
.as-console-wrapper {
  max-height: 100% !important;
}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62417052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档