更有效和简短的JS代码?

时间:2018-08-28 21:43:26

标签: javascript

在此任务中我需要一些建议。

我们有以下结构:

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
        }),{})
      }), {})
  }), {})
}

1 个答案:

答案 0 :(得分:0)

在效率较低的惰性版本中,JSON.parseJSON.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库用于类似的方法。