javascript - 合并 n 个对象数组中的 n 个对象

标签 javascript

我有两个对象数组,我想创建一个新的对象数组,其中每个对象都是前两个对象的合并版本,例如:

const one = [
  { id: 1, title: 'One' },
  { id: 2, title: 'Two' }
]

const two = [
  { status: 'Open' },
  { status: 'Close' }
]

从上面的数组中我期望:

const result = [
  { id: 1, title: 'One', status: 'Open' },
  { id: 1, title: 'Two', status: 'Close' }
]

这里的问题是我不知道如何创建一个实际上可以接收 n 个对象数组并创建新数组的函数,例如,如果我想合并第三个数组:

const three = [
  { items: 10 },
  { items: 2 }
]

我期望以下数组:

const result = [
  { id: 1, title: 'One', status: 'Open', items: 10 },
  { id: 1, title: 'Two', status: 'Close', items: 2 }
]

我认为实际上我可以创建一个接收扩展的函数,但我不知道如何将接收到的每个数组中的每个对象合并到函数中。

最佳答案

您可以使用“Array.reduce”或“Array.map”来实现此目的,如下所示

const one = [
  { id: 1, title: 'One' },
  { id: 2, title: 'Two' }
]

const two = [
  { status: 'Open' },
  { status: 'Close' }
]

const three = [
  { items: 10 },
  { items: 2 }
]

// using REDUCE
function mergeArrays1(arrays) {
  return arrays[0].reduce((a, d, i) => a.concat(Object.assign(...arrays.map(d => d[i]))), [])
}

// Using Map
function mergeArrays2(arrays) {
  return arrays[0].map((d, i) => Object.assign(...arrays.map(d => d[i])))
}

console.log(mergeArrays1([one, two, three]))
console.log(mergeArrays2([one, two, three]))

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

相关文章:

javascript - AJAX PHP 数据库查询不起作用

javascript - 为什么 onclick 会被触发两次?

javascript - 每 X 秒运行一次 Javascript - 这段代码有什么问题?

javascript - 如何使用正式自定义模板初始化传单 map ?

javascript - 顶部的粘性标题更改颜色

javascript - 在 JSON 对象的特定位置插入属性

javascript - 表单提交给自身 : how to I create a back link that works on mobile?

JavaScript/jQuery 如何正确执行 .click 功能?

javascript - 我需要 2 个 ng-models 吗?

javascript - 将字符串模板分成两行而不附加新行或空格