前端一道算法题,求解。

`

let list = [ {
        templateData: 'list',
        id: '1',
        children: [
            {
                templateData: 'son1',
                id: '1_1'
            },
            {
                templateData: 'son2',
                id: '1_2',
                children: [
                    {
                        templateData: 'dog',
                        id: '1_2_1',
                    }
                ]
            }
        ]
    },
    {
        templateData: 'data',
        id: '2'
    }
]`

我想用上面的list遍历得到下面的结构:
[{"list": [{ "son1": "son1" }, { "son2": [{ "dog": "dog"}] }] }, {"data": "data"}]

规则:如果无字段childer则对象值为{key: key},
如果有字段children,则值为{key: [{key: key}]},由于有很多子集所以需要些个方法。我该怎么做,求大佬解决。我已经一晚上没有睡觉了

阅读 1.4k
1 个回答

做一个简单的递归就可以了:

function formatData(arr = []) {
  return arr.map(item => {
    const obj = {};
    const templateData = item.templateData;

    if (item.children) {
      obj[templateData] = formatData(item.children);

      return obj;
    }

    obj[templateData] = templateData;
    return obj;
  });
}

let list = [
  {
    templateData: 'list',
    id: '1',
    children: [
      {
        templateData: 'son1',
        id: '1_1',
      },
      {
        templateData: 'son2',
        id: '1_2',
        children: [
          {
            templateData: 'dog',
            id: '1_2_1',
          },
        ],
      },
    ],
  },
  {
    templateData: 'data',
    id: '2',
  },
];

formatData(list);
// [{ list: [{ son1: 'son1' }, { son2: [{ dog: 'dog' }] }] }, { data: 'data' }];
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题