基于键 javascript 的 Concat 对象数组

Concat object array based on keys javascript

我有如下数组

{
    "key1": [
        { "prop1": "26181712", "prop2": "2618112" },
        { "prop1": "26181734", "prop2": "2618144" }
    ],
    "Key2": [
        { "prop1": "2618174", "prop2": "2618542" }
    ]
}

预期结果如下。

[
    { "key": "key1", "prop1": "26181712", "prop2": "2618112" },
    { "key": "key1", "prop1": "26181734", "prop2": "2618144" },
    { "key": "Key2", "prop1": "2618174", "prop2": "2618542" }
]

我不太擅长数组方法。这似乎是反向减少。它可以通过 for 循环实现,但我想知道 better/efficient 使用 simple/less/es6 代码的方法。

展开key,映射内部数组与{key}合并,展平

data={
    "key1": [
        { "prop1": "26181712", "prop2": "2618112" },
        { "prop1": "26181734", "prop2": "2618144" }
    ],
    "Key2": [
        { "prop1": "2618174", "prop2": "2618542" }
    ]
}
console.log(
Object.entries(data).flatMap(([key,v])=>v.map(x=>({key, ...x})))
)

你遍历你的键,在你映射的每个键值上并添加一个新的 属性 到它 key.

因为这是一个数组,所以您可以使用扩展运算符将其扩展到 result 数组中。

let data = {
    "key1": [
        { "prop1": "26181712", "prop2": "2618112" },
        { "prop1": "26181734", "prop2": "2618144" }
    ],
    "Key2": [
        { "prop1": "2618174", "prop2": "2618542" }
    ]
}


let result = [];
for(let prop in data){ 
   let item = data[prop].map(el => ({key: prop, ...el}))
   result = [...result, ...item] 
}

console.log(result);

嵌套地图和扁平化的最简单方法。

const data = {
    "key1": [
        { "prop1": "26181712", "prop2": "2618112" },
        { "prop1": "26181734", "prop2": "2618144" }
    ],
    "Key2": [
        { "prop1": "2618174", "prop2": "2618542" }
    ]
};

console.log(
  Object.keys(data).map(i => data[i].map(j => (Object.assign({'key': i}, j)))).flat()
);