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

时间:2018-11-10 08:13:32

标签: 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 }
]

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

3 个答案:

答案 0 :(得分: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]))

答案 1 :(得分:1)

传入每个数组作为参数,然后在其中一个上使用df['new'] = pd.qcut(x=df.machine_r, q=[0, .25, .5, .8, 1.], labels=labels).astype(float) print (df) machine_r new 0 1 0.25 1 2 0.50 2 1 0.25 3 5 0.75 4 3 0.50 5 4 0.75 6 5 0.75 7 1 0.25 8 2 0.50 9 3 0.50 10 4 0.75 11 5 0.75 12 7 1.00 13 8 1.00 14 1 0.25 15 2 0.50 print (df.dtypes) machine_r int64 new float64 dtype: object .map新数组中的每个项目:

Object.assign

当然,这取决于每个具有相同元素数量的数组。

答案 2 :(得分:0)

如果知道必须合并的阵列数量,则可以使用 map

或者,您也可以使用Lodash的 merge 。这样,您可以将任意数量的数组作为参数传递。

尝试一下:

DomainName: ziggo.nl
const one = [
  { id: 1, title: 'One' },
  { id: 2, title: 'Two' }
];

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

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

// Normal Merge
function merge(one, two, three) {
  return one.map(
    (item, index) => ({
      ...item,
      ...two[index],
      ...three[index]
    })
  );
}

// Lodash Merge
function mergeWithLodash(...arrays) {
  return _.merge(...arrays);
}

console.log(merge(one, two, three));

console.log('merged with lodash: ', mergeWithLodash(one, two, three));