鍍金池/ 問(wèn)答/HTML/ js多層級(jí)嵌套對(duì)象扁平化

js多層級(jí)嵌套對(duì)象扁平化

有這樣一個(gè)對(duì)象

var wrap_group = [
    {
        value: 'A',
        group: [
            {
                value: '1',
                group: [
                    {value: '12'}
                ]
            },
            {
                value: '3',
                group: [
                    {value: '10'}
                ]
            }
        ]
    },
    {
        value: 'B',
        group: [
        {
            value: '2',
            group: [
                {value: '22'}
            ]
        }
        ]
    }
]

想把對(duì)象優(yōu)雅的轉(zhuǎn)換為一下形式的:
wrap_group = [

{
    building_number: 'A',
    floor_number: '1',
    room_number: '12'
},
{
    building_number: 'A',
    floor_number: '3',
    room_number: '10'
},
{
    building_number: 'B',
    floor_number: '2',
    room_number: '22'
},

]
請(qǐng)介紹下具體的思路和代碼。

回答
編輯回答
朕略傻

可轉(zhuǎn)化為深度優(yōu)先搜索遍歷打印路徑問(wèn)題。

簡(jiǎn)單實(shí)現(xiàn):

function flatten (group) {
  const result = []
  group.forEach(kid => bfs(kid, []))
  return result

  function bfs (node, path) {
    if (!node.group/* or path.length === 2 */) {
      const [building_number, floor_number] = path
      result.push({ building_number, floor_number, room_number: node.value })
    } else {
      path.push(node.value)
      node.group.forEach(kid => bfs(kid, path))
      path.pop()
    }
  }
}

console.log(flatten(wrap_group))
2017年9月11日 14:21
編輯回答
墨小白

我只想到了循環(huán)法和解構(gòu)法,等大神分享新思路。

2017年10月29日 14:28
編輯回答
情皺
function flatSub(arr, value)
{
    return  [].concat(...arr.map(function(item) {
        return {building_number: value,floor_number:item.value, room_number: item.group[0].value}
    }))
}

var result = [].concat(...wrap_group.map(function(item) {
    return flatSub(item.group, item.value)
}))

console.log(result)
2017年6月24日 12:37