jsは多層ネストされたjsonを解析し、すべての親要素の属性とすべてのサブ要素をループします.
79202 ワード
多層ネストjsonが知られており、すべての親要素と子要素のid値を取り出します.
構想:いったいどれだけの層がネストされているのか分からないため、再帰的にスタックがオーバーフローし、クエリー時間が特に長いという問題を引き起こす可能性がある.
したがって、一度クエリーして、サブノードがあるかどうかを判断し、ある場合は、サブノードを取り出して親ノードに移動し、データ長を動的に変更し、無限ループ処理jsonがすべてのidを取り出す
既知のサブノードidがすべての親ノードidを取り出す方法
考えは上と同じですが、もっと複雑です.
N層ネストjson
1.まずjsonデータを巡り、処理を行い、すべてのchildrenノードを取り出し、元のデータに新しい属性parentNodeを与え、その値はすべての彼の上位レベルの親ノードidである.
2.クエリーidを巡ると、一番外側のレイヤのidをクエリーするだけですべてのサブノードと親ノードのid属性になります.
3.値の取得
JSONデータ
私はまた簡単な方法を書きました.
ES 6は配列に対して新しくてとても简単な方法があって、兴味があるのは试みることができて、私はどのように使うことを忘れて、后で更に更新します
構想:いったいどれだけの層がネストされているのか分からないため、再帰的にスタックがオーバーフローし、クエリー時間が特に長いという問題を引き起こす可能性がある.
したがって、一度クエリーして、サブノードがあるかどうかを判断し、ある場合は、サブノードを取り出して親ノードに移動し、データ長を動的に変更し、無限ループ処理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;
}