知道一个纯数字数组,如何去过滤另一个复杂数组?

发布于 2022-09-12 02:09:20 字数 580 浏览 14 评论 0

var a = [101, 1011, 102, 1021]

var b = [
            {
                id: 101, name: '监控',
                children: [{ id: 1011, name: '监控11' }, { id: 1012, name: '监控12' }, { id: 1013, name: '监控13' }]
            },

            {
                id: 102, name: '其他',
                children: [{ id: 1021, name: '其他21' }, { id: 1022, name: '其他22' }, { id: 1022, name: '其他23' }, { id: 102, name: '其他24' }]
            }

        ]

请问各位大神,这俩个数组,a中的数字是实际返回的,要根据a的数字筛选b数组中的元素,新数组只要ID中包含a的,结构也不能改变,因为要拿来渲染动态菜单的,请问各位大神有什么好的主意吗?谢谢啦

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

无法言说的痛 2022-09-19 02:09:20
// => [{"id":101,"name":"监控","children":[{"id":1011,"name":"监控11"}]},{"id":102,"name":"其他","children":[{"id":1021,"name":"其他21"},{"id":102,"name":"其他24"}]}]
getByIds(data, [101, 1011, 102, 1021])
var data = [
  {
    id: 101,
    name: '监控',
    children: [
      {
        id: 1011,
        name: '监控11'
      },
      {
        id: 1012,
        name: '监控12'
      },
      {
        id: 1013,
        name: '监控13'
      }
    ]
  },
  {
    id: 102,
    name: '其他',
    children: [
      {
        id: 1021,
        name: '其他21'
      },
      {
        id: 1022,
        name: '其他22'
      },
      {
        id: 1022,
        name: '其他23'
      },
      {
        id: 102,
        name: '其他24'
      }
    ]
  }
]

function getByIds (list, ids) {
  var tmp;
  return list.filter(item => {
    if(ids.some(id => id === item.id)) {
      if(item.children) {        
        tmp = item.children.filter(c => ids.some(id => id === c.id))
        if(tmp.length) {
          item.children = tmp
        }
      } else {
        item.children = []
      }
      return true
    } else {
      return false
    }
  })
}
秋意浓 2022-09-19 02:09:20

filter + 递归即可:

function solution (arr) {
    return arr.filter(item => {
        let { id, children } = item
        if (Array.isArray(children)) {
            item.children = solution(children)
        }
        return a.includes(id)
    })
}

solution(b)
琉璃繁缕 2022-09-19 02:09:20
  var a = [101, 1011, 102, 1021]

  var b = [
    {
      id: 101, name: '监控',
      children: [{ id: 1011, name: '监控11' }, { id: 1012, name: '监控12' }, { id: 1013, name: '监控13' }]
    },

    {
      id: 102, name: '其他',
      children: [{ id: 1021, name: '其他21' }, { id: 1022, name: '其他22' }, { id: 1022, name: '其他23' }, { id: 102, name: '其他24' }]
    }

  ]

  const newB = b.filter(item => a.includes(item.id))
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文