我有两个对象数组,我想创建一个新的对象数组,其中每个对象都是前两个对象的合并版本,例如:
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 }
]
我认为实际上我可以创建一个可以接收价差的函数,但是我不知道如何合并接收到该函数的每个数组中的每个对象。
答案 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));