![](/img/trans.png)
[英]How do I use nested For loops to print array values within an array on new lines?
[英]New array counter within nested loops
我正在研究 JavaScript,我相信我了解這些循環是如何工作的。 但是,我有一個練習,我不明白哪個是計數器的 function,用於填充新數組。 這是練習:
var animals = ["goat", "cat", "crow"]; var products = ["milk", "cheese", "burger"]; var foodItems = []; var k = 0; for (var i = 0; i < animals.length; i++) { for (var j = 0; j < products.length; j++) { foodItems[k] = animals[i] + products[j]; k++; } } console.log(foodItems);
上面的代碼生成數組["goatmilk", "goatcheese", "goatburger", "catmilk", "catcheese", "catburger", "crowmilk", "crowcheese", "crowburger"]
。 如果我取出 [k] 計數器,它會給我一個 1 元素數組[crowburger]
; 如果我把一個零作為foodItems
計數器,它也會給我[crowburger]
,但是更大的數字會在crowburger
之前在數組中產生undefined
的元素(即foodItems[10]
等於[undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, "crowburger"]
)。
我的問題:[k] 計數器有什么作用,為什么如果用數字代替它會產生undefined
的元素加上[crowburger?]
k
是數組的索引。 數組是元素的排序列表,標准訪問是使用索引來獲取給定索引處的元素。 索引是從零開始的,它從數組的第一個元素的零開始。
如果始終采用相同的索引,則給定索引處的元素將被新元素替換。
圖案
array[index] = value:
index++;
就像Array#push
,它在數組末尾添加元素,而無需手動維護索引。
array.push(value);
k
是外部迭代器。 它控制着全局foodItems
空數組的索引,因為如果你在循環的 scope 內聲明它,它就無法在循環外訪問,並且會消失。 因此,通常,您聲明外部數組和迭代器,並且當您遍歷循環時,您將值添加到數組並對其進行迭代。
可以這樣想:
var k = 0 // 所以我們從 foodItems 數組的第一個索引開始 var foodItems = []; // 所以它在開始時被聲明為空
這就是它的基本作用:
foodItems[k] (目前為零)等於 animals[0] + products[0]... 然后 foodItems[1] 是 animal[0] + products[1] 等等。
您不能使用任何數字的原因是它在啟動時沒有任何索引,並且您無法訪問空數組的第 5 個(例如)元素。
k 計數器是 foodItems 的索引 - 在您的情況下,它不能 go 高於 9,即 3x3。
所以第一次你有 k=0
foodItems[0] = "goat"+"milk"
第二個 k++(將 k 加一)
foodItems[1] = "goat"+"cheese"
如果您不想要櫃台,只需推到 foodItems
即更改foodItems[k] = animals[i] + products[j];
to foodItems.push(animals[i] + products[j]);
它會在每次推送時將字符串添加到 foodItems 中的一個新空白位置,從而使每次推送的 foodItems 更長
var animals = ["goat", "cat", "crow"]; var products = ["milk", "cheese", "burger"]; var foodItems = []; for (var i = 0; i < animals.length; i++) { for (var j = 0; j < products.length; j++) { foodItems.push(animals[i] + products[j]); } } console.log(foodItems);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.