首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何比较两个对象数组并更改在两个数组中找到的对象的值?

如何比较两个对象数组并更改在两个数组中找到的对象的值?
EN

Stack Overflow用户
提问于 2017-07-21 06:24:08
回答 4查看 14.9K关注 0票数 5

假设我有两个对象数组:

代码语言:javascript
运行
复制
let array1 = [
          {
           id: 1,
           name: 'snow'
          },
          {
           id: 4,
           name: 'jo'
          },
          {
           id: 8,
           name: 'bran'
          },
          {
           id: 12,
           name: 'gondo'
          },
          {
           id: 13,
           name: 'peter'
          }
        ]

let array2 = [
      {
       id: 3,
       name: 'brim'
      },
      {
       id: 4,
       name: 'not-jo'
      },
      {
       id: 8,
       name: 'not-bran'
      },
      {
       id: 13,
       name: 'spleen'
      }
    ]

我希望在array2中找到与array1通过id匹配的所有对象,并更改它们的名称值以匹配array1中的名称值。

在我的伪码里:

代码语言:javascript
运行
复制
array1.forEach((person)=> {
 if(person.id is equal to person.id in array2){
   person.name = person.name in array1
 }
})
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-07-21 06:36:32

试试这个:

代码语言:javascript
运行
复制
array2.map(function(x){ 
       var result=array1.filter(a1=> a1.id==x.id);
       if(result.length>0) { x.name=result[0].name;}
       return x })
票数 14
EN

Stack Overflow用户

发布于 2017-07-21 06:35:44

循环遍历每个元素并比较那里的ids。如果它们匹配,则更新名称:

代码语言:javascript
运行
复制
for (var i = 0; i < array2.length; i++) {
  for (var k = 0; k < array1.length; k++) {
    if (array2[i].id == array1[k].id) {
      array2[i].name = array1[k].name;
      break;
    }
  }
}

试一试:

代码语言:javascript
运行
复制
let array1 = [{
    id: 1,
    name: 'snow'
  },
  {
    id: 4,
    name: 'jo'
  },
  {
    id: 8,
    name: 'bran'
  },
  {
    id: 12,
    name: 'gondo'
  },
  {
    id: 13,
    name: 'peter'
  }
]

let array2 = [{
    id: 3,
    name: 'brim'
  },
  {
    id: 4,
    name: 'not-jo'
  },
  {
    id: 8,
    name: 'not-bran'
  },
  {
    id: 13,
    name: 'spleen'
  }
]
console.log(array2);
for (var i = 0; i < array2.length; i++) {
  for (var k = 0; k < array1.length; k++) {
    if (array2[i].id == array1[k].id) {
      array2[i].name = array1[k].name;
      break;
    }
  }
}
console.log(array2);

票数 2
EN

Stack Overflow用户

发布于 2017-07-21 06:30:01

你可以做这样的事

代码语言:javascript
运行
复制
var idDict = {};//a dictionary to lookup array1 id
for(var idx=0;idx<array1.length;idx++) {
    idDict[array1[idx].id] = array1[idx].name;
}
for(var idx=0;idx<array2.length;idx++) {
   if (idDict[array2[idx].id]) {
        array2[idx].name = idDict[array2[idx].id];
   }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45230436

复制
相关文章

相似问题

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