1
私は再帰関数で重大な問題に直面しています。これは私の再帰関数である:forループ関数for recursive function
iterateJson(data, jsonData, returnedSelf) {
var obj = {
"name": data.groupName,
"size": 4350,
"type": data.groupType
};
if (data.parentGroupName == jsonData.name) {
jsonData.children.push(obj);
} else {
if (jsonData.children) {
for (var i = 0; i < jsonData.children.length; i++) {
if (data.parentGroupName == jsonData.children[i].name) {
jsonData.children[i].children.push(obj);
elementFound = true;
break;
}
}
if (elementFound) {
return jsonData;
} else {
if (jsonData.children) {
for (i = 0; i < jsonData.children.length; i++) {
if (elementFound) {
return jsonData;
} else {
jsonData = jsonData.children[i];
jsonData = returnedSelf.iterateJson(data, jsonData, returnedSelf);
}
}
}
}
}
}
return jsonData;
},
は、今の問題は、私のjsonDataを変えつつある
(jsonData.children.length)、2番目のforループでは、ということです。親jsonDataを保持する方法。私の質問は明らかです。 より正確に編集する。 最初にjsondataに5つの要素があり、ループに入り、最初の子を新しいjsonDataとして取り込み、この関数を再度呼び出します。条件が満たされると、それはforループに戻り、jsonDataは5データの初期要素を持つ必要があります。オリジナルのjsonDataの最初の子要素である新しいjsonデータを持っています。
私の質問は、5要素でその親jsonDataを保持する方法です。私は、入力されたデータについては知らないが、
jsonData = jsonData.children[i];
jsonData = returnedSelf.iterateJson(data, jsonData, returnedSelf);
これはjsonDataを上書きすることができますラインのみであるため
オブジェクトは参照によって渡されるため、 'jsonData = jsonData.children [i];が発行されます。 '' jsonData.children [i] = returnedSelf.iterateJson(data、jsonData、returnedSelf); ' – Rajesh
の値を取得する関数の外にgloba変数を宣言することができます。 –
' children'は、自動的に長さが更新されます。だから、もしあなたが 'i'と比較されている間、すべての反復で同じ長さに依存する再帰的ループを使用するなら、長さは配列にもっと押し込むにつれて増加するかもしれません。これが起こっている場合、forEachやmapのような配列メソッドを使いたいかもしれません。私はまだ真剣に見ていない... – zer00ne