javascript - 比较和合并两个对象数组

标签 javascript

我有两个对象数组(arr1 和 arr2)。我想从 arr1 中选择对象,其中 arr1.id == arr2.typeId 并添加到结果 arr2.Price

var arr1 =
[{"id":20,"name":"name1"},
{"id":24,"name":"name2"},
{"id":25,"name":"name3"},
{"id":28,"name":"name4"},
{"id":29,"name":"name5"}]


var arr2 = 
[{"typeId":20,"Price":500},
{"typeId":24,"Price":1100},
{"typeId":28,"Price":1000}]

如何获得以下内容?

var result = 
[{"item":{"id":20,"name":"name1"}, "price":"500"}},
{{"item":{"id":24,"name":"name2"}, "price":"1100"},
{{"item":{"id":28,"name":"name4"}, "price":"1000"}]


var result = arr1.filter(function(obj1){
                        return arr2.some(function(obj2){
                            return obj1.id === obj2.typeId;
                        });
                    })

最佳答案

您可以在 arr2 上使用 reduce(),然后使用 find() 检查 arr1 中是否存在具有相同 id 的对象。

var arr1 =
[{"id":20,"name":"name1"},
{"id":24,"name":"name2"},
{"id":25,"name":"name3"},
{"id":28,"name":"name4"},
{"id":29,"name":"name5"}]

var arr2 = 
[{"typeId":20,"Price":500},
{"typeId":24,"Price":1100},
{"typeId":28,"Price":1000}]

var result = arr2.reduce(function(r, e) {
  var c = arr1.find(a => e.typeId == a.id)
  if(c) r.push({item: c, price: e.Price})
  return r
}, [])

console.log(result)

关于javascript - 比较和合并两个对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42751391/

相关文章:

javascript - 带有按钮的 Jquery 自动 slider

javascript - 更改 JavaScript 源

javascript - 在 mongo shell 中运行 JavaScript 出现语法错误

javascript - 如何删除前第二节课?

javascript - 如何使用 Cypress 将变量的存储值获取到 URL 命令中?

javascript - promise 完成后导出

javascript - 无法更改对象位置

javascript - 如何在 github pages repo 中读取和写入 JSON 文件?

javascript - 您是否需要在 jQuery 的 document.ready 中放置一个 knockout.js 绑定(bind)处理程序

javascript - 如何生成颜色以按颜色对元素进行分组?