配列と .splice から obj を削除しなければならない状況があります。以下に示すように、配列が正しく再番号付けされていないことが原因です。
配列のオブジェクトを削除した後、配列内の未定義のプレースホルダーを取り除くには、[].concat() を実行します。これに関する問題は、新しい配列が正しく番号付けされていないことです。
低いオーバーヘッドで新しい配列を正しく再番号付けするには、何が最も効果的ですか?
for (var o = 0; o < uncheckedQue[i].childNodes.length; o += 1) {
uncheckedQue[i].removeChild(uncheckedQue[i].childNodes[o]);
if (uncheckedQue[i].childNodes.length < 1) {
delete uncheckedQue[i];//remove the document fragment if has no childnodes
};
};
uncheckedQue = [].concat(uncheckedQue);
0: DocumentFragment
2: DocumentFragment
3: DocumentFragment
4: DocumentFragment
5: DocumentFragment
6: DocumentFragment
7: DocumentFragment
length: 8
***何かを片付けさせてください。これらの childNode は、配列内のドキュメント フラグメントに含まれています。これらの childNode は Dom にはありません。
これが外側のループです。削除を使用する理由に気付くと思いますので、外側のループの長さを正しく保ちます。
for (var i = 0; i < uncheckedQue.length; i += 1) {
//
if (t.mucs === t.mucsstop) { break; };
for (var o = 0; o < uncheckedQue[i].childNodes.length; o += 1) {
uncheckedQue[i].removeChild(uncheckedQue[i].childNodes[o]);
t.mucs += 1;
if (uncheckedQue[i].childNodes.length < 1) {
delete uncheckedQue[i];//remove the document fragment if has no childnodes
};
if (t.mucs === t.mucsstop) { break; };
};
};