knockout.js 基于关键字的连接对象数组javascript [已关闭]

6yjfywim  于 2022-11-23  发布在  Java
关注(0)|答案(3)|浏览(158)

已关闭。此问题需要details or clarity。当前不接受答案。
**想要改进此问题吗?**通过editing this post添加详细信息并阐明问题。

两年前就关门了。
Improve this question
我有一个如下的数组

{
    "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循环来实现,但我想知道更好/更有效的方法,用简单/更少/es6代码来实现。

c0vxltue

c0vxltue1#

展开向外键,Map合并了{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})))
)
ibps3vxo

ibps3vxo2#

你循环你的键,在每一个键值上你Map它,并添加一个新的属性到它key
因为这是一个数组,所以可以使用spread运算符将其扩展到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);
sqxo8psd

sqxo8psd3#

最简单的方式与嵌套Map&平面。

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()
);

相关问题