关于递归 about recursion

const treeData2 = [{
        name: '夏1',
        id: 'xia1',
        departments: [{
            name: '夏1-1',
            id: 'xia1-1'
        }]
    }, {
        name: '小夏2',
        id: 'xia2'
    }, {
        name: '夏3',
        id: 'xia3',
        departments: [{
            name: '夏3-1',
            id: 'xia3-1'
        }, {
            name: '夏3-2',
            id: 'xia夏3-2',
            departments: [{
                name: 'xia3-2-1',
                id: '3-2-1'
            }]
        }]
    }, {
        name: '小夏2',
        id: 'xia2'
    }
];

我需要把这段数据变成下面的数据,嵌套格式是一样的,只是上面把所有的name 改为title,所有的id 改为key,所有的departments 改为children,

上面的不确定嵌套几层, i need transform up to down,i dont know how many department,

const treeData2 = [{
  title: '夏1',
  key: 'xia1',
  children: [{
    title: '夏1-1',
    key: 'xia1-1'
  }]
}, {
  title: '小夏2',
  key: 'xia2'
}, {
  title: '夏3',
  key: 'xia3',
  children: [{
    title: '夏3-1',
    key: 'xia3-1'
  }, {
    title: '夏3-2',
    key: 'xia夏3-2',
    children: [{
      title: 'xia3-2-1',
      key: '3-2-1'
    }]
  }]
}, {
  title: '小夏2',
  key: 'xia2'
}
];

求大神帮忙 please!

阅读 2.3k
3 个回答
const treeData2 = [{
        name: '夏1',
        id: 'xia1',
        departments: [{
            name: '夏1-1',
            id: 'xia1-1'
        }]
    }, {
        name: '小夏2',
        id: 'xia2'
    }, {
        name: '夏3',
        id: 'xia3',
        departments: [{
            name: '夏3-1',
            id: 'xia3-1'
        }, {
            name: '夏3-2',
            id: 'xia夏3-2',
            departments: [{
                name: 'xia3-2-1',
                id: '3-2-1'
            }]
        }]
    }, {
        name: '小夏2',
        id: 'xia2'
    }
];
let change = function(arr) {
    let result = [];
    for (let obj of arr) {
        let resultObj = {};
        resultObj.title = obj.name;
        resultObj.key = obj.id;
        if (obj. departments) resultObj.children = change(obj. departments);
        result.push(resultObj);
    }
    return result;
}
let result = change(treeData2);

供参考

function replaceKeys (data) {
  return data.map(({name, id, departments}) => {
    let el = {title: name, key: id}
    if (departments) { el.children = replaceKeys(departments) }
    return el
  })
}
let changeKey = trees => trees.map(d => ({title: d.name, key: d.id, children: d.departments ? changename(d.departments) : undefined}))

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