两个树形数组嵌套循环便利赋值问题如何优化

  const arr1 = [
    {
      id: 1,
      name: 'aa',
      children: [
        {
          id: 2,
          name: 'aa-a',
        },
      ],
    },
  ]
  const arr2 = [
    {
      id: 1,
      name: 'bb',
      children: [
        {
          id: 2,
          name: 'bb-a',
        },
      ],
    },
  ]
  arr1.forEach((v) => {
    arr2.forEach((s) => {
      if (v.id === s.id) {
        v.name = s.name
      }
      v.children &&
        v.children.forEach((subV) => {
          s.children &&
            s.children.forEach((subS) => {
              if (subV.id === subS.id) {
                subV.name = subS.name
              }
            })
        })
    })
  })

两个数组,两个数组层级都是两层,如果第一个数组中的对象的id和第二个数组的对象的id相同,则把第二个数组中对象的name赋值给第一个数组中对应的对象的name,现在是通过循环比对赋值的写法,有无更好的优化写法

阅读 1.5k
1 个回答

我的话会这么写,因为树的结点id应该都不一样

function loopTree(tree, cb){
    tree.forEach(node => {
        cb && cb(node);
        Array.isArray(node.children) && loopTree(node.children);
    })
}
let obj = {}
loopTree(arr2, node => obj[node.id] = node.name)
loopTree(arr1, node => node.name = obj[node.id] || node.name)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题