一、定义一个嵌套子级数组

    1. const arr = [{
    2. id:1,
    3. key: "411200000000",
    4. label: "三门峡市",
    5. children: [{
    6. key: "11411200005802248U",
    7. label: "三门峡市水利局"
    8. }, {
    9. key: "11411200005802264H",
    10. label: "三门峡市林业局"
    11. }, {
    12. key: "114112000058023445",
    13. label: "三门峡市生态环境局"
    14. }]
    15. }, {
    16. id:2,
    17. key: "1000111",
    18. label: "自有机构",
    19. children: []
    20. }]

    二、定义递归函数

    1. function changeCascader(key, arrData) {
    2. let arr = [];
    3. let returnArr = []; // 存放结果的数组
    4. let depth = 0; // 定义全局层级
    5. // 定义递归函数
    6. function childrenEach(childrenData, depthN) {
    7. for (var j = 0; j < childrenData.length; j++) {
    8. depth = depthN; // 将执行的层级赋值 到 全局层级
    9. arr[depthN] = childrenData[j].key;
    10. if (childrenData[j].key == key) {
    11. returnArr = arr.slice(0, depthN + 1); //将目前匹配的数组,截断并保存到结果数组,
    12. break;
    13. } else {
    14. if (childrenData[j].children) {
    15. depth++;
    16. childrenEach(childrenData[j].children, depth);
    17. }
    18. }
    19. }
    20. return returnArr;
    21. }
    22. return childrenEach(arrData, depth);
    23. }

    三、定义一个新数组

    1. let newArr = []

    四、获取子级id

    1. let keyString = "11411200005802248U"

    五、将子级id转成字符串数组

    1. let key = keyString.split(',')

    六、对转换成数组的子id进行遍历,然后利用递归求出父id添加到新数组中

    1. for (let i in key) {
    2. newArr.push(
    3. changeCascader(key[i],arr)
    4. )
    5. }
    6. console.log(newArr)

    注意:
    这里的子数组为children,如果子数组是其它字段,则需要把递归函数中的children替换