js 如何根据ID 查询所有子id

如下数据:

{ id:1, pId:0, name:"菜单1"},
{ id:10, pId:1, name:"菜单1-10"},
{ id:11, pId:1, name:"菜单1-11"},
{ id:100, pId:10, name:"菜单1-10-100"},
{ id:1000, pId:100, name:"菜单1-10-100-1000"},

我想要根据一个id查询下面所有的子元素id。
比如:
我获取到的id = 1 ,则能返回如下数组:
let ids = ['10','11','100','1000']
我获取到的id = 10 ,则能返回如下数组:
let ids = ['100','1000']

阅读 3.1k
2 个回答

下面是获取直接子元素

const findIds = id => arr.flatMap(item => item.pId == id ? [item.id] : []);
findIds(1) // [10, 11]

如果要获取所有后代元素,就再改一下

const findIds = id => arr.flatMap(item => {
  const ids = [];
  if (item.pId == id) {
    ids.push(item.id, ...findIds(item.id));
  }
  return ids;
});
findIds(1) // [10, 100, 1000, 11]
const list = [
    { id:1, pId:0, name:"菜单1"},
    { id:10, pId:1, name:"菜单1-10"},
    { id:11, pId:1, name:"菜单1-11"},
    { id:100, pId:10, name:"菜单1-10-100"},
    { id:1000, pId:100, name:"菜单1-10-100-1000"}
]

const map = list.reduce((map, item) => {
    const ids = map[item.pId] || (map[item.pId] = [])
    ids.push(item.id)
    return map
}, {})

console.log(map[0], map[1], map[10], map[100])
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题