0

私は(私には)かなり基本的なネストされたループのように見えるものを持っています。外側のループが最初にのみ起動することを除いて:

var js_recipes = <?php echo json_encode($recipesArray); ?>;
console.log("there are " + js_recipes.length + " recipes"); //console confirms 2

for (var i = 0; i < js_recipes.length; i++) {
    console.log("adding recipe"); //only fires once
    js_recipe = js_recipes[i];

    //add each ingredient
    for (var i = 0; i < js_recipe.ingredients.length; i++) {
        console.log("adding ing"); //fires multiple times for first recipe
    };
};
console.log("looping complete");//fires ok

コンソール出力は次のとおりです。

There are 2 recipes
adding recipe
adding ing
adding ing
adding ing
adding ing
looping complete

単純なものが欠けているに違いありませんが、なぜ最初のレシピだけを繰り返すのですか?

4

3 に答える 3

13

変数のスコープは、グローバルスコープまたはそれが宣言されている関数のいずれかであるiため、このコードには1つしかなくi、内側のループと外側のループによってインクリメントされます。

ループごとに異なるイテレータ変数を使用します。

for (var i = 0; i < js_recipes.length; i++) {
    console.log("adding recipe");
    js_recipe = js_recipes[i];

    //add each ingredient
    for (var j = 0; j < js_recipe.ingredients.length; j++) {
        console.log("adding ing"); 
    };
};
于 2013-03-11T14:51:20.473 に答える
2

同じ変数を使用していますi可変巻き上げのため、これらの宣言は両方とも1つになります。したがってi、getはパスごとに2回インクリメントされます...

于 2013-03-11T14:51:42.603 に答える
0

関数変数のスコープに問題がある場合は、内部のforループをjなどのiとは異なる変数に設定してみてください。

于 2013-03-11T14:54:14.717 に答える