在此任务中我需要一些建议。
我们有以下结构:
Set
我需要这样做:
const scenes = {
'Node1': {
'scene1': [
{
nodeKey: 'cccc',
category: 'user',
},
{
nodeKey: 'eeee',
category: 'interface',
},
]
},
}
我使用reduce函数使其工作。但是我认为可以更有效地完成。谢谢!
我的代码(已更新):
let result = {
'Node1': {
'scene1': {
'cccc': {
nodeKey: 'cccc',
category: 'user',
}
}
}
}
或者我们可以这样做。但是我认为使用reduce(only)函数还是更好。嗯
function makeNewStructure(scenes) {
return Object.keys(scenes).reduce((prevNode, currentNode) => ({
...prevNode,
[currentNode]: Object.keys(scenes[currentNode]).reduce((prevScene, currentScene) => ({
...prevScene,
[currentScene]: scenes[currentNode][currentScene].reduce((previous, current) => ({
...previous,
[current.nodeKey]: current
}),{})
}), {})
}), {})
}
答案 0 :(得分:0)
在效率较低的惰性版本中,JSON.parse
或JSON.stringify
可用于枚举所有值:
const scenes = { 'Node1': { 'scene1': [ { nodeKey: 'cccc', category: 'user' , },
{ nodeKey: 'eeee', category: 'interface', }, ] } }
const result = JSON.parse( JSON.stringify(scenes), (key, val) =>
Array.isArray(val) ? val.reduce((o, v) => (o[v.nodeKey] = v, o), {}) : val)
console.log( result )
否则,可以将递归函数或JS库用于类似的方法。