jsは多層ネストされたjsonを解析し、すべての親要素の属性とすべてのサブ要素をループします.

79202 ワード

多層ネストjsonが知られており、すべての親要素と子要素のid値を取り出します.
構想:いったいどれだけの層がネストされているのか分からないため、再帰的にスタックがオーバーフローし、クエリー時間が特に長いという問題を引き起こす可能性がある.
したがって、一度クエリーして、サブノードがあるかどうかを判断し、ある場合は、サブノードを取り出して親ノードに移動し、データ長を動的に変更し、無限ループ処理jsonがすべてのidを取り出す
            menuIdInit () {
                var _this = this;
                var _menu = _this.menus;
                var menuId = [];
                var len = _menu.length;
                for(var i = 0; i < len; i++){
                    var item = _menu[i] ;
                    if(item.child && item.child.length != 0){
                        var child = item.child ;
                        for(var j = 0; j < child.length; j++){
                            _menu[len + j] = child[j] ;
                        }
                        len = _menu.length ;
                    }
                    menuId.push(item.id);
                }
                this.menusTree = menuId ;          
            },

既知のサブノードidがすべての親ノードidを取り出す方法
考えは上と同じですが、もっと複雑です.
 
N層ネストjson
1.まずjsonデータを巡り、処理を行い、すべてのchildrenノードを取り出し、元のデータに新しい属性parentNodeを与え、その値はすべての彼の上位レベルの親ノードidである.
2.クエリーidを巡ると、一番外側のレイヤのidをクエリーするだけですべてのサブノードと親ノードのid属性になります.
3.値の取得
//json   
function searchInit(json) {
    var newJson = json.concat([]);
    var len = newJson.length;   //  
    var parentNode = [];
    console.log('newJson', newJson);
    for (var i = 0; i < len; i++) {
        var item = newJson[i];
        if (item.children && item.children.length != 0) {
            var child = item.children;
            for (var j = 0; j < child.length; j++) {
                if (item.parentNode) {
                    child[j].parentNode = item.parentNode.concat([item.id]);
                }
                else {
                    child[j].parentNode = [item.id]
                }
                console.log(item.parentNode, item.id);
                newJson[len + j] = child[j];
            }
            len = newJson.length;
        }
    }
    return newJson;

}

//      ,        id
function searchTree(json, id) {
console.log("tree",json);
    var newJson = json.concat([]);
    var len = newJson.length;   //  
    console.log("json",len);
    var parentNode = [];
    //  id
    for (var s = 0; s < len; s++) {
        if (newJson[s].id == id) {
            if (newJson[s].parentNode == null || newJson[s].parentNode.length == 0) {
                parentNode = [];
            }
            else {
                parentNode = newJson[s].parentNode;
            }
        }
        else {
            continue;
        }
    }
    return parentNode;
}

//          id
//json :       
//keys :      Vue         id  
function getKeys(json, keys) {
    var final = [];
    for (var i = 0; i < keys.length; i++) {
        var final = searchTree(json, keys[i]).concat(final);
    }
    if (json.length == 0 || keys.length == 0) {
        return [];
    }
    else {
        var c = $.unique((final.concat(keys)).sort());
        return  c;
    }
}

JSONデータ
{
    "children": [
        {
            "children": [
                {
                    "children": [
                        {
                            "children": null,
                            "name": "  ",
                            "id": 443,
                            "label": "  ",
                            "open": true,
                            "parentNode": [
                                121,
                                232,
                                411
                            ]
                        },
                        {
                            "children": null,
                            "name": "    ",
                            "id": 420,
                            "label": "    ",
                            "open": true,
                            "parentNode": [
                                121,
                                232,
                                411
                            ]
                        },
                        {
                            "children": null,
                            "name": "  ",
                            "id": 415,
                            "label": "  ",
                            "open": true,
                            "parentNode": [
                                121,
                                232,
                                411
                            ]
                        },
                        {
                            "children": null,
                            "name": "  ",
                            "id": 414,
                            "label": "  ",
                            "open": true,
                            "parentNode": [
                                121,
                                232,
                                411
                            ]
                        },
                        {
                            "children": null,
                            "name": "  ",
                            "id": 413,
                            "label": "  ",
                            "open": true,
                            "parentNode": [
                                121,
                                232,
                                411
                            ]
                        },
                        {
                            "children": null,
                            "name": "  ",
                            "id": 412,
                            "label": "  ",
                            "open": true,
                            "parentNode": [
                                121,
                                232,
                                411
                            ]
                        }
                    ],
                    "name": "    ",
                    "id": 411,
                    "label": "    ",
                    "open": true,
                    "parentNode": [
                        121,
                        232
                    ]
                },
                {
                    "children": [
                        {
                            "children": null,
                            "name": "  ",
                            "id": 403,
                            "label": "  ",
                            "open": true,
                            "parentNode": [
                                121,
                                232,
                                401
                            ]
                        },
                        {
                            "children": null,
                            "name": "  ",
                            "id": 402,
                            "label": "  ",
                            "open": true,
                            "parentNode": [
                                121,
                                232,
                                401
                            ]
                        }
                    ],
                    "name": "      ",
                    "id": 401,
                    "label": "      ",
                    "open": true,
                    "parentNode": [
                        121,
                        232
                    ]
                },
                {
                    "children": [
                        {
                            "children": [
                                {
                                    "children": null,
                                    "name": "  ",
                                    "id": 442,
                                    "label": "  ",
                                    "open": true,
                                    "parentNode": [
                                        121,
                                        232,
                                        241,
                                        371
                                    ]
                                },
                                {
                                    "children": null,
                                    "name": "  ",
                                    "id": 374,
                                    "label": "  ",
                                    "open": true,
                                    "parentNode": [
                                        121,
                                        232,
                                        241,
                                        371
                                    ]
                                },
                                {
                                    "children": null,
                                    "name": "  ",
                                    "id": 373,
                                    "label": "  ",
                                    "open": true,
                                    "parentNode": [
                                        121,
                                        232,
                                        241,
                                        371
                                    ]
                                },
                                {
                                    "children": null,
                                    "name": "  ",
                                    "id": 372,
                                    "label": "  ",
                                    "open": true,
                                    "parentNode": [
                                        121,
                                        232,
                                        241,
                                        371
                                    ]
                                }
                            ],
                            "name": "        ",
                            "id": 371,
                            "label": "        ",
                            "open": true,
                            "parentNode": [
                                121,
                                232,
                                241
                            ]
                        },
                        {
                            "children": [
                                {
                                    "children": [
                                        {
                                            "children": null,
                                            "name": "  ",
                                            "id": 441,
                                            "label": "  ",
                                            "open": true,
                                            "parentNode": [
                                                121,
                                                232,
                                                241,
                                                311,
                                                351
                                            ]
                                        },
                                        {
                                            "children": null,
                                            "name": "  ",
                                            "id": 354,
                                            "label": "  ",
                                            "open": true,
                                            "parentNode": [
                                                121,
                                                232,
                                                241,
                                                311,
                                                351
                                            ]
                                        },
                                        {
                                            "children": null,
                                            "name": "  ",
                                            "id": 353,
                                            "label": "  ",
                                            "open": true,
                                            "parentNode": [
                                                121,
                                                232,
                                                241,
                                                311,
                                                351
                                            ]
                                        },
                                        {
                                            "children": null,
                                            "name": "  ",
                                            "id": 352,
                                            "label": "  ",
                                            "open": true,
                                            "parentNode": [
                                                121,
                                                232,
                                                241,
                                                311,
                                                351
                                            ]
                                        }
                                    ],
                                    "name": "     ",
                                    "id": 351,
                                    "label": "     ",
                                    "open": true,
                                    "parentNode": [
                                        121,
                                        232,
                                        241,
                                        311
                                    ]
                                },
                                {
                                    "children": [
                                        {
                                            "children": null,
                                            "name": "  ",
                                            "id": 440,
                                            "label": "  ",
                                            "open": true,
                                            "parentNode": [
                                                121,
                                                232,
                                                241,
                                                311,
                                                341
                                            ]
                                        },
                                        {
                                            "children": null,
                                            "name": "  ",
                                            "id": 344,
                                            "label": "  ",
                                            "open": true,
                                            "parentNode": [
                                                121,
                                                232,
                                                241,
                                                311,
                                                341
                                            ]
                                        },
                                        {
                                            "children": null,
                                            "name": "  ",
                                            "id": 343,
                                            "label": "  ",
                                            "open": true,
                                            "parentNode": [
                                                121,
                                                232,
                                                241,
                                                311,
                                                341
                                            ]
                                        },
                                        {
                                            "children": null,
                                            "name": "  ",
                                            "id": 342,
                                            "label": "  ",
                                            "open": true,
                                            "parentNode": [
                                                121,
                                                232,
                                                241,
                                                311,
                                                341
                                            ]
                                        }
                                    ],
                                    "name": "     ",
                                    "id": 341,
                                    "label": "     ",
                                    "open": true,
                                    "parentNode": [
                                        121,
                                        232,
                                        241,
                                        311
                                    ]
                                },
                                {
                                    "children": [
                                        {
                                            "children": null,
                                            "name": "  ",
                                            "id": 439,
                                            "label": "  ",
                                            "open": true,
                                            "parentNode": [
                                                121,
                                                232,
                                                241,
                                                311,
                                                331
                                            ]
                                        },
                                        {
                                            "children": null,
                                            "name": "  ",
                                            "id": 334,
                                            "label": "  ",
                                            "open": true,
                                            "parentNode": [
                                                121,
                                                232,
                                                241,
                                                311,
                                                331
                                            ]
                                        },
                                        {
                                            "children": null,
                                            "name": "  ",
                                            "id": 333,
                                            "label": "  ",
                                            "open": true,
                                            "parentNode": [
                                                121,
                                                232,
                                                241,
                                                311,
                                                331
                                            ]
                                        },
                                        {
                                            "children": null,
                                            "name": "  ",
                                            "id": 332,
                                            "label": "  ",
                                            "open": true,
                                            "parentNode": [
                                                121,
                                                232,
                                                241,
                                                311,
                                                331
                                            ]
                                        }
                                    ],
                                    "name": "    ",
                                    "id": 331,
                                    "label": "    ",
                                    "open": true,
                                    "parentNode": [
                                        121,
                                        232,
                                        241,
                                        311
                                    ]
                                },
                                {
                                    "children": [
                                        {
                                            "children": null,
                                            "name": "  ",
                                            "id": 438,
                                            "label": "  ",
                                            "open": true,
                                            "parentNode": [
                                                121,
                                                232,
                                                241,
                                                311,
                                                321
                                            ]
                                        },
                                        {
                                            "children": null,
                                            "name": "  ",
                                            "id": 324,
                                            "label": "  ",
                                            "open": true,
                                            "parentNode": [
                                                121,
                                                232,
                                                241,
                                                311,
                                                321
                                            ]
                                        },
                                        {
                                            "children": null,
                                            "name": "  ",
                                            "id": 323,
                                            "label": "  ",
                                            "open": true,
                                            "parentNode": [
                                                121,
                                                232,
                                                241,
                                                311,
                                                321
                                            ]
                                        },
                                        {
                                            "children": null,
                                            "name": "  ",
                                            "id": 322,
                                            "label": "  ",
                                            "open": true,
                                            "parentNode": [
                                                121,
                                                232,
                                                241,
                                                311,
                                                321
                                            ]
                                        }
                                    ],
                                    "name": "Wi-Fi  ",
                                    "id": 321,
                                    "label": "Wi-Fi  ",
                                    "open": true,
                                    "parentNode": [
                                        121,
                                        232,
                                        241,
                                        311
                                    ]
                                }
                            ],
                            "name": "      ",
                            "id": 311,
                            "label": "      ",
                            "open": true,
                            "parentNode": [
                                121,
                                232,
                                241
                            ]
                        },
                        {
                            "children": [
                                {
                                    "children": [
                                        {
                                            "children": null,
                                            "name": "  ",
                                            "id": 437,
                                            "label": "  ",
                                            "open": true,
                                            "parentNode": [
                                                121,
                                                232,
                                                241,
                                                291,
                                                296
                                            ]
                                        },
                                        {
                                            "children": null,
                                            "name": "  ",
                                            "id": 299,
                                            "label": "  ",
                                            "open": true,
                                            "parentNode": [
                                                121,
                                                232,
                                                241,
                                                291,
                                                296
                                            ]
                                        },
                                        {
                                            "children": null,
                                            "name": "  ",
                                            "id": 298,
                                            "label": "  ",
                                            "open": true,
                                            "parentNode": [
                                                121,
                                                232,
                                                241,
                                                291,
                                                296
                                            ]
                                        },
                                        {
                                            "children": null,
                                            "name": "  ",
                                            "id": 297,
                                            "label": "  ",
                                            "open": true,
                                            "parentNode": [
                                                121,
                                                232,
                                                241,
                                                291,
                                                296
                                            ]
                                        }
                                    ],
                                    "name": "RAM",
                                    "id": 296,
                                    "label": "RAM",
                                    "open": true,
                                    "parentNode": [
                                        121,
                                        232,
                                        241,
                                        291
                                    ]
                                },
                                {
                                    "children": [
                                        {
                                            "children": null,
                                            "name": "  ",
                                            "id": 436,
                                            "label": "  ",
                                            "open": true,
                                            "parentNode": [
                                                121,
                                                232,
                                                241,
                                                291,
                                                292
                                            ]
                                        },
                                        {
                                            "children": null,
                                            "name": "  ",
                                            "id": 295,
                                            "label": "  ",
                                            "open": true,
                                            "parentNode": [
                                                121,
                                                232,
                                                241,
                                                291,
                                                292
                                            ]
                                        },
                                        {
                                            "children": null,
                                            "name": "  ",
                                            "id": 294,
                                            "label": "  ",
                                            "open": true,
                                            "parentNode": [
                                                121,
                                                232,
                                                241,
                                                291,
                                                292
                                            ]
                                        },
                                        {
                                            "children": null,
                                            "name": "  ",
                                            "id": 293,
                                            "label": "  ",
                                            "open": true,
                                            "parentNode": [
                                                121,
                                                232,
                                                241,
                                                291,
                                                292
                                            ]
                                        }
                                    ],
                                    "name": "EMMC",
                                    "id": 292,
                                    "label": "EMMC",
                                    "open": true,
                                    "parentNode": [
                                        121,
                                        232,
                                        241,
                                        291
                                    ]
                                }
                            ],
                            "name": "      ",
                            "id": 291,
                            "label": "      ",
                            "open": true,
                            "parentNode": [
                                121,
                                232,
                                241
                            ]
                        },
                        {
                            "children": [
                                {
                                    "children": null,
                                    "name": "  ",
                                    "id": 282,
                                    "label": "  ",
                                    "open": true,
                                    "parentNode": [
                                        121,
                                        232,
                                        241,
                                        281
                                    ]
                                }
                            ],
                            "name": "      ",
                            "id": 281,
                            "label": "      ",
                            "open": true,
                            "parentNode": [
                                121,
                                232,
                                241
                            ]
                        },
                        {
                            "children": [
                                {
                                    "children": null,
                                    "name": "  ",
                                    "id": 272,
                                    "label": "  ",
                                    "open": true,
                                    "parentNode": [
                                        121,
                                        232,
                                        241,
                                        271
                                    ]
                                }
                            ],
                            "name": "Android    ",
                            "id": 271,
                            "label": "Android    ",
                            "open": true,
                            "parentNode": [
                                121,
                                232,
                                241
                            ]
                        },
                        {
                            "children": [
                                {
                                    "children": null,
                                    "name": "  ",
                                    "id": 264,
                                    "label": "  ",
                                    "open": true,
                                    "parentNode": [
                                        121,
                                        232,
                                        241,
                                        261
                                    ]
                                },
                                {
                                    "children": null,
                                    "name": "  ",
                                    "id": 263,
                                    "label": "  ",
                                    "open": true,
                                    "parentNode": [
                                        121,
                                        232,
                                        241,
                                        261
                                    ]
                                },
                                {
                                    "children": null,
                                    "name": "  ",
                                    "id": 262,
                                    "label": "  ",
                                    "open": true,
                                    "parentNode": [
                                        121,
                                        232,
                                        241,
                                        261
                                    ]
                                }
                            ],
                            "name": "    ",
                            "id": 261,
                            "label": "    ",
                            "open": true,
                            "parentNode": [
                                121,
                                232,
                                241
                            ]
                        },
                        {
                            "children": [
                                {
                                    "children": null,
                                    "name": "  ",
                                    "id": 254,
                                    "label": "  ",
                                    "open": true,
                                    "parentNode": [
                                        121,
                                        232,
                                        241,
                                        251
                                    ]
                                },
                                {
                                    "children": null,
                                    "name": "  ",
                                    "id": 253,
                                    "label": "  ",
                                    "open": true,
                                    "parentNode": [
                                        121,
                                        232,
                                        241,
                                        251
                                    ]
                                },
                                {
                                    "children": null,
                                    "name": "  ",
                                    "id": 252,
                                    "label": "  ",
                                    "open": true,
                                    "parentNode": [
                                        121,
                                        232,
                                        241,
                                        251
                                    ]
                                }
                            ],
                            "name": "     ",
                            "id": 251,
                            "label": "     ",
                            "open": true,
                            "parentNode": [
                                121,
                                232,
                                241
                            ]
                        }
                    ],
                    "name": "      ",
                    "id": 241,
                    "label": "      ",
                    "open": true,
                    "parentNode": [
                        121,
                        232
                    ]
                }
            ],
            "name": "      ",
            "id": 232,
            "label": "      ",
            "open": true,
            "parentNode": [
                121
            ]
        },
        {
            "children": [
                {
                    "children": null,
                    "name": "  ",
                    "id": 142,
                    "label": "  ",
                    "open": true,
                    "parentNode": [
                        121,
                        141
                    ]
                }
            ],
            "name": "    ",
            "id": 141,
            "label": "    ",
            "open": true,
            "parentNode": [
                121
            ]
        },
        {
            "children": null,
            "name": "    ",
            "id": 131,
            "label": "    ",
            "open": true,
            "parentNode": [
                121
            ]
        }
    ],
    "name": "    ",
    "id": 121,
    "label": "    ",
    "open": true
}

私はまた簡単な方法を書きました.
ES 6は配列に対して新しくてとても简単な方法があって、兴味があるのは试みることができて、私はどのように使うことを忘れて、后で更に更新します




    
    
    
    Document



    
    
        var demo = [{
            "children": [{
                "children": [{
                    "children": [{
                        "children": [{
                            "children": [{
                                "children": [],
                                "index": "111111"
                            }],
                            "index": "11111"
                        }, {
                            "children": [],
                            "index": "11112"
                        }],
                        "index": "1111"
                    }, {
                        "children": [],
                        "index": "1112"
                    }],
                    "index": "111"
                }, {
                    "children": [{
                        "children": [],
                        "index": "1121"
                    }, {
                        "children": [],
                        "index": "1122"
                    }],
                    "index": "112"
                }, {
                    "children": [],
                    "index": "113"
                }],
                "index": "11"
            }, {
                "children": [],
                "index": "12"
            }],
            "index": "1"
        }];
        console.log("old", demo);

        function add() {
            init(demo);
            addNode(demo)
            console.log("new", demo);
        }

        function init(item) {
            for (let i = 0; i < item.length; i++) {
                item[i]["parent"] = [];
                item[i]["parent"].push(item[i]["index"]);
                if (item[i].children.length !== 0) {
                    var oChild = item[i].children;
                    init(oChild);
                }
            }
            return item;
        }

        function addNode(item) {
            // debugger
            for (let i = 0; i < item.length; i++) {
                var parent = item[i]["parent"];
                if (item[i].children.length !== 0) {
                    var oChild = item[i].children;
                    for (let j = 0; j < oChild.length; j++) {
                        console.log("oChild", oChild);
                        oChild[j]["parent"] = oChild[j]["parent"].concat(parent);
                    }
                    addNode(oChild);
                }
            }
            return item;
        }