在一个对象中组合两个数组,但保留键



我需要在一个对象中组合两个数组。

const mainObject = {
user: [{
a: "aaaa",
b: "bbbb"
}, {
c: "cccc",
d: "dddd"
}],
developer: [{
e: "eeee",
f: "ffff"
}]
}

我可以使用mainObject.user.concot(mainObject.developer(很容易地将它们组合在一起

[{
a: "aaaa",
b: "bbbb"
}, {
c: "cccc",
d: "dddd"
},{
e: "eeee",
f: "ffff"
}]

我需要的输出是:

[{
a: "aaaa",
b: "bbbb",
origin: "user"
}, {
c: "cccc",
d: "dddd",
origin: "user"
},{
e: "eeee",
f: "ffff",
origin: "developer"
}]

有多种方法可以做到这一点,其中一种方法是使用mapconcat

const mainObject = {
user: [{
a: "aaaa",
b: "bbbb"
}, {
c: "cccc",
d: "dddd"
}],
developer: [{
e: "eeee",
f: "ffff"
}]
}
const result = mainObject.user.map(item => ({ ...item,
origin: 'user'
})).concat(mainObject.developer.map(item => ({ ...item,
origin: 'developer'
})));
console.log(result);

或另一种方法

const mainObject = {
user: [{
a: "aaaa",
b: "bbbb"
}, {
c: "cccc",
d: "dddd"
}],
developer: [{
e: "eeee",
f: "ffff"
}]
}
const result = Object.entries(mainObject).map(([key, value]) => {
return value.map(item => ({ ...item,
origin: key
}))
}).flat();
console.log(result);

您可以使用reduceforEach来迭代数据并添加原始属性

const mainObject = {
user: [{
a: "aaaa",
b: "bbbb"
}, {
c: "cccc",
d: "dddd"
}],
developer: [{
e: "eeee",
f: "ffff"
}]
}
const result = Object.entries(mainObject)
.reduce((acc, [origin, value]) => {
value.forEach(value2 => {
acc.push({ ...value2,
origin
})
})
return acc
}, [])
console.log(result)

最新更新