根据数组里面的id,在多维数组中保留id相同的数据及父级的数据?

const arr = [
    {
      title: 'dome1',
      checkedList: [],
      children: [
        {
          id: 1,
          name: 'ceshi1',
          node: 'node1',
          uName: '2u',
          children: [
            {
              title: 'OSD.1',
              key: '0-0-0-0',
            },
            {
              title: 'OSD.2',
              key: '0-0-0-1',
            },
          ],
        },
        {
          id: 2,
          name: 'ceshi1',
          node: 'node2',
          uName: '1u',
          children: [
            {
              title: 'OSD.3',
              key: '0-0-0-3',
            },
            {
              title: 'OSD.4',
              key: '0-0-0-4
            },
          ],
        },
      ],
    },
    {
      title: 'dome2',
      checkedList: [],
      children: [
        {
          id: 3,
          name: 'ceshi1',
          node: 'node1',
          children: [
            {
              title: 'OSD.5',
              key: '0-0-0-5',
            },
            {
              title: 'OSD.5',
              key: '0-0-0-6',
            },
          ],
        },
        {
          id: 4,
          name: 'ceshi1',
          node: 'node2',
          uName: '4u',
        },
      ],
    },
  ]

根据ids = [0-0-0-0, 0-0-0-5]数据保留成下面的数据

  const newArr = [
    {
      title: 'dome1',
      checkedList: [],
      children: [
        {
          id: 1,
          name: 'ceshi1',
          node: 'node1',
          uName: '2u',
          children: [
            {
              title: 'OSD.1',
              key: '0-0-0-0',
            },
          ],
        },
      ],
    },
    {
      title: 'dome2',
      checkedList: [],
      children: [
        {
          id: 3,
          name: 'ceshi1',
          node: 'node1',
          uName: '3u',
          children: [
            {
              title: 'OSD.5',
              key: '0-0-0-5',
            },
          ],
        },
      ],
    },
  ]

求大佬指教

阅读 1.6k
1 个回答
function filterArr(arr, ids){
    return arr.reduce((list, item) => {
        let has = ids.includes(item.key)
        let res = {...item}
        if(!has && Array.isArray(item.children)){
            res.children = filterArr(item.children, ids)
            has = !!res.children.length
        }

        has && list.push(res)
        return list
    }, [])
}

const newArr = filterArr(arr, ['0-0-0-0', '0-0-0-5'])
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题