JavaScript 階層構造のデータの加工

以下のような階層構造のデータがある。

const data = [
	{
  	name: 'A',
    children: [
    	{
      	name: 'AA1',
        flag: false,
        children: [
        	{
          	name: 'AAA1',
            flag: false,
            children: [],
          },
          {
          	name: 'AAA2',
            flag: false,
            children: [],
          }
        ],
      }
    ],
    flag: false,
  }
];

すべての flag を true に変えたい。

汎用的な処理を作る。

// children があること前提
const mapHierarchy = (hierarchy, f) => {
	return hierarchy.map(data => ({
  	...f(data),
    children: mapHierarchy(data.children, f)
  }));
};

mapHierarchy に渡す関数の定義。

const makeFlag = data => {
	return {
  	...data,
    flag: true,
  }
};

実行。

const result = mapHierarchy(data, makeFlag);
console.log(result);