如何合并对象中的两个数组并保留原键标识
为合并数组元素添加来源标识
现有如下包含数组的对象:
const mainObject = { user: [{ a: "aaaa", b: "bbbb" }, { c: "cccc", d: "dddd" }], developer: [{ e: "eeee", f: "ffff" }] }
直接使用mainObject.user.concat(mainObject.developer)合并数组时,会丢失元素的来源键信息,合并结果如下:
[{ a: "aaaa", b: "bbbb" }, { c: "cccc", d: "dddd" },{ e: "eeee", f: "ffff" }]
需求是为每个元素添加origin字段,标注其来源的键名,期望输出:
[{ a: "aaaa", b: "bbbb", origin: "user" }, { c: "cccc", d: "dddd", origin: "user" },{ e: "eeee", f: "ffff", origin: "developer" }]
解决方案
可以通过遍历对象的键值对,为每个数组元素添加origin字段后再合并:
const merged = Object.entries(mainObject).flatMap(([key, arr]) => { return arr.map(item => ({ ...item, origin: key })); });
代码说明
Object.entries(mainObject)将对象转换为键值对数组,格式为[['user', 数组], ['developer', 数组]]flatMap遍历每个键值对,同时将处理后的子数组扁平化- 对每个数组元素使用
map,通过扩展运算符...保留原属性,同时添加origin字段并赋值为对应的键名
内容的提问来源于stack exchange,提问作者Jerome
相关产品推荐
相关产品推荐

