Welcome toVigges Developer Community-Open, Learning,Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
660 views
in Technique[技术] by (71.8m points)

如何优雅地递归获取 树形数组的每个同级第一层数据

比如有如下数组

let data = [{
      id: 4,
      name: "沙发类",
      children: [{
          id: 41,
          name: "布艺沙发",
          children: [{
            id: 411,
            name: '布艺沙发411',
          }, {
            id: 412,
            name: '布艺沙发412'
          }]
        },
        {
          id: 42,
          name: "充气沙发"
        },
        {
          id: 43,
          name: "懒人沙发"
        }
      ]
    },{
      id: 5,
      name: "木床类",
    }]

第一层的第一个数据 id 为 4 第二层的第一个数据 id 为 41 第三层的第一个数据 id 为 411
期望的结果

[{id:4},{id:41},{id:411}]

自己写了个 但是总感觉有 bug

getFirstIdList(arr = []) {
  let res = [];
  for (let i = 0; i < arr.length; i++) {
    const item = arr[i];
    res.push({id:item.id});
    if (item.children) {
      res = res.concat(getFirstIdList(item.children));
    }
    break;
  }
  return res;
}
getFirstIdList(data)

请教各位大佬是否有更优雅的方式,或者 lodash 这种第三方库是否有提供?


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)
function getIdList (list) {
  const result = []
  while (list && list.length) {
    result.push({ id: list[0].id })
    list = list[0].children
  }
  return result
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to Vigges Developer Community for programmer and developer-Open, Learning and Share

2.1m questions

2.1m answers

63 comments

56.7k users

...