像这种数据格式如何递归

let arr = [{
    role: 'admin',
    left: 'fzz',
    children: [{
        role: 'other',
        right: 'pdd',
        children: [{
            role: 'admin'
        }]
    }] 
}]

像这种数据格式如何递归返回一个数组,数据格式保持不变,但是取出里面role为admin的呢?(包括children里面的数据也要对role进行筛选)如果父级role不是admin,则该级和它的children都丢弃
返回:

arr = [{
    role: 'admin',
    left: 'fzz',
    children: [{
        role: 'admin',
        right: 'pdd'
    }]
}]
阅读 1.5k
2 个回答

这需求改的和之前差的很大哦...
这个答案是应之前的需求:返回所有admin,并且删除childrenadmin

getRoles(getData());

function getRoles(data, role = 'admin') {
  let resArr = [];

  main(data);

  return resArr;

  function main(data) {
    if (data && data.length) {
      data.forEach((d, i) => {
        if (d.role === 'admin') resArr.push(data.splice(i, 1));
        if (d.children && d.children.length) main(d.children);
      });
    }
  }
}

function getData() {
  return [{
    role: 'other',
    children: [{
      role: 'admin',
      index: '1'
    }, {
      role: 'other'
    }]
  },{
    role: 'admin',
    index: '2',
    children: [{
      role: 'other',
      children: [{
        role: 'admin',
        index: '3'
      }]
    }]
  }];
}
let arr = [{
    role: 'admin',
    left: 'fzz',
    children: [{
        role: 'other',
        right: 'pdd',
        children: [{
            role: 'admin'
        }]
    }] 
}]
arr.find(function(x){
    return x.role ==='admin';
})
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题