私は巨大なjavascriptオブジェクトを順序付けられていないリストに変換するために1週間努力してきました。私は今は正しく機能していません。最初のレイヤーだけを返します。残りのそれdoesnt。私の解決策は、setTimeout(function、0)を使うことです。は大量のJSONをHTMLリストに再帰的に変換します
JSON形式:
{
"name": "",
"value": { //JSON always start with these 2. content is inside this value key.
"randomname": {
"type": "list",
"value": {
"type": "int", //another type and value to that is in the array
"value": [26, 32, 25]
}
},
"randomname": {
"type": "int",
"value": 5
},
"randomname": {
"type": "string",
"value": "string or something"
},
"randomname": {
"type": "compound", //compound types can be inside compound types can be inside compount types etc.
"value": {
"randomname": {
"type": "int",
"value": 6
},
"randomname": {
"type": "int",
"value": 6
}
}
},
"randomname": {
"type": "long",
"value": [0.0345034, 4.345345]
}
}
私が作ってみましたコード:
function readObject(el, data, boo) {
for(var ind in data) {
el.innerHTML += '<li>';
if (boo) {
el.innerHTML += ind + ' - ';
}
console.log("another loop");
switch (data[ind].type) {
case "compound":
el.innerHTML += data[ind].type + ' - ';
setTimeout(function(){ readObject(el,data[ind].value,false); el.innerHTML += '</li>';},0);
break;
case "string":
el.innerHTML += data[ind].type + ' - ';
el.innerHTML += data[ind].value;
callback();
break;
case "int":
el.innerHTML += data[ind].type + ' - ';
el.innerHTML += data[ind].value;
callback();
break;
case "long":
el.innerHTML += data[ind].type + ' - ';
el.innerHTML += data[ind].value[0] + ' - ' + data[ind].value[1];
callback();
break;
case "list":
el.innerHTML += data[ind].type + ' - ';
el.innerHTML += data[ind].value.type + ' - ';
setTimeout(function(){ readObject(el,listToObject(data[ind].value),false);el.innerHTML += '</li>'; },0);
break;
}
function callback() {
el.innerHTML += '</li>';
}
}
}
(他のすべての型が文字列のと同じになります)
日時: "ブラウザの凍結" - [リミットDOMアップデート](https://stackoverflow.com/documentation/javascript/1640/performance-tips/14978/limit-dom-updates#t=201706101834575306386) – Emissary
@Emissaryありがとう、私は、ブラウザのフリーズも長い再帰によって引き起こされると思います。 – mrjvs
ほとんどの場合、DOMの更新が増えただけです。 DOM操作は、比較的非常に遅いです。 –