プログラミング初学者のための実務につながる練習問題 JavaScript012 再起処理

今日のタスク

以下のようなデータがあります。

const data = [
	{
  	id: 100,
    name: 'AAA',
    children: [
    	{id: 101, name: 'service1', code: 001},
      {id: 102, name: 'service2', code: 002},
      {id: 103, name: 'service3', code: 003},
    ]
  },
  {
  	id: 200,
    name: 'BBB',
    children: [
    	{
      	id: 201, 
        name: 'service4', 
        children: [
      		{id: 202, name: 'service5', code: 005},
      		{id: 203, name: 'service6', code: 006},
      	]
      },
    ]
  }
]

すべての children の配列をマージした配列を作成してください。以下のような感じです。

[ { id: 101, name: 'service1', code: 1 },
  { id: 102, name: 'service2', code: 2 },
  { id: 103, name: 'service3', code: 3 },
  { id: 202, name: 'service5', code: 5 },
  { id: 203, name: 'service6', code: 6 } ]

children がある階層が異なることに注意してください。

実装

再帰を使って実装してみました。少し難易度が高いかもしれません。

const getCode = data => {
  let result = data.reduce((prev, current) => {
    if(current.children === undefined) {
      return [...prev, current]
    }
    return [...prev, ...getCode(current.children)]
  }, [])

  return result
}

お疲れ様でした。