大佬, 救命!!!树结构数据 拿到所有层级的nodeId 并生成一个新的数组 求大佬指导下 指条明路

急急急!!! 大佬救命

树结构数据(对象套childNode, childNode套childNode, 最后一级没有childNode) 初始四层, 但可以一直增加childNode 所以层数为N

数据格式
customJson: {
    content: "所有人",
    nodeId: "SID-f554f3db-74a2-a603-03d6-a0051f93bc60",
    type: "start",
    childNode: {
      content: "发起人自选",
      nodeId: "SID-12c519a1-e595-4ade-503e-9864f3e910ae",
      type: "fill",
      childNode: {
        content: "发起人自选",
        nodeId: "SID-a9fada60-4d12-8080-f7b2-4e54e0d1d4b2",
        type: "fill",
        childNode: {
          content: "发起人自选",
          nodeId: "SID-103d4a0a-df06-9745-13d8-eb758e35f6cd",
          type: "approved",
        }
      }
    }

希望得到的数组: [节点1nodeId , 节点2nodeId, 节点3nodeId ,  节点4nodeId ,...]

newArray: ["SID - f554f3db - 74a2 - a603 - 03d6 - a0051f93bc60",  "SID-12c519a1-e595-4ade-503e-9864f3e910ae", "SID-a9fada60-4d12-8080-f7b2-4e54e0d1d4b2"]

图片

图片说明

需求

需求是拿到所有层级的 nodeId 并生成一个新的数组 即希望得到的数组 newArray:[ 第一层的nodeId ,第二层的nodeId ,第三层的nodeId, 第四层的nodeId,... ] 求大佬指导下

function map2Arr(map) {
    if (map) {
        let arr = [];
        arr.push(map.nodeId);
        let childNode = map.childNode;
        if (childNode) {
            // 递归调用
            arr = arr.concat(map2Arr(childNode));
        }
        return arr;
    }
    return [];
}

let arr = map2Arr(customJson);
console.log(arr);

你这个描述得不清楚 如果第一层有2个 这个数组怎么排 还是按顺序啊

1,设个空数组变量$Arr
2,将原数据转为数组格式
3,使用for或each进行循环,由于你的数组结构固定是四层,可嵌套4个循环,每层循环内部判断当前的key==nodeId时,取其值push到$Arr中

按照上述步骤即可解决你的问题

https://blog.csdn.net/qq_36437172/article/details/87198122

 var customJson = {
                content: "所有人",
                nodeId: "SID-f554f3db-74a2-a603-03d6-a0051f93bc60",
                type: "start",
                childNode: {
                content: "发起人自选",
                nodeId: "SID-12c519a1-e595-4ade-503e-9864f3e910ae",
                type: "fill",
                childNode: {
                    content: "发起人自选",
                    nodeId: "SID-a9fada60-4d12-8080-f7b2-4e54e0d1d4b2",
                    type: "fill",
                    childNode: {
                    content: "发起人自选",
                    nodeId: "SID-103d4a0a-df06-9745-13d8-eb758e35f6cd",
                    type: "approved",
                    }
                }
                }
            }
            var arr = []
            function f(s){
                for(let i in s){
                if(typeof s[i]=="object"){
                    f(s[i])
                }else{
                    if(i.indexOf('nodeId')>-1){
                        arr.push(s[i])   
                    }
                  }
                }
                console.log('数组',arr)
            }
            f(customJson);

上面的都太磨叽,还递归呐,看看这个不递归的方式

var customJson= {
    content: "所有人",
    nodeId: "SID-f554f3db-74a2-a603-03d6-a0051f93bc60",
    type: "start",
    childNode: {
      content: "发起人自选",
      nodeId: "SID-12c519a1-e595-4ade-503e-9864f3e910ae",
      type: "fill",
      childNode: {
        content: "发起人自选",
        nodeId: "SID-a9fada60-4d12-8080-f7b2-4e54e0d1d4b2",
        type: "fill",
        childNode: {
          content: "发起人自选",
          nodeId: "SID-103d4a0a-df06-9745-13d8-eb758e35f6cd",
          type: "approved",
        }
      }
    }
};
function mapNodeId(obj){
    var stack=obj;
    var result=[];
    while(stack!=null){
        result.push(stack.nodeId);
        stack=stack.childNode
    }
    return result;
}
console.log(mapNodeId(customJson));