基本的循环逻辑对我来说没有意义

时间:2016-07-06 05:02:43

标签: javascript arrays for-loop

我一直在努力学习Javascript的时间最长,这有点令人沮丧。我又回来学习基础知识了,我正在玩下面这些for循环和数组。

有人可以解释为什么此代码的输出是[1,2,3,4,5]而不是[6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25]

var game1 = new Array();
for(i = 25; i > "love is like a river".length; i = i - 1) {
  console.log(game1.push(i)); 
}

6 个答案:

答案 0 :(得分:3)

length属性返回字符串的长度(字符数)。这样"love is like a river".length给出了20.我认为你把它误认为是。的话。然后循环将表现得像

var game1 = new Array();
for(i = 25;i>20;i=i-1){
    console.log(game1.push(i));
}

要获得预期答案,代码将是:

var game1 = new Array();
for(i = 25;i>"love is like a river".length;i=i-1){
  console.log(game1.push(i));
}

答案 1 :(得分:3)

console.log(game1.push(i));

这句话的作用是向控制台打印被推送元素的索引。结果1,2,3,4,5是数组的长度。

您想要编码的是:

var game1 = [];

for(i = 25; i > "love is like a river".length; i--){

console.log(i);
game1.push(i);
}

在上面的示例中,我切换了数组的声明,因为这是最常见的方式(这不是必需的)。它仍然可以正常使用您的声明版本。在for循环中,我已经切换

i = i - 1;

简写版:

i-- or --i

将'i'递减1.我也分开了

console.log(i) and game1.push(i) to be separate

这将打印出'i'的结果:25,24,23,22,21 这是因为for循环执行用户在循环结束时定义的操作,因此当循环打印出21并将其推送到数组时,它会递减到20,循环停止。该数组仍将具有数字25,24,23,22,21。但控制台不会记录它。

如果您想要上面定义的输出,则必须:

var game1 = [];
for(i = 6;i >= 25; i++){
game1.push(i);
console.log(game1[i-6]);
}

在这个你将'i'添加到game1导致[6,7,8,9,10,11,12,13,14 ... 25]并将变量记录在'i - 6的索引处”。这将导致方括号中的数字为“0,1,2,3,4,5”,从0开始,因为这是所有数组索引的起始位置。

答案 2 :(得分:2)

"love is like a river".length是20.所以循环等同于:

for(i = 25; i>20; i=i-1){

}

话虽如此,你有5次调用console.log传递给它的以下参数:每个步骤:

game1.push(25)
game1.push(24)
game1.push(23)
game1.push(22)
game1.push(21)

不确切知道game1.push到底是做什么的,很难说清楚。但是,假设game1是一个数组,您将在每次推送时获得数组的新长度。

根据MDN

  

push()方法将一个或多个元素添加到数组的末尾   返回数组的新长度

答案 3 :(得分:2)

您获得[25, 24, 23, 22, 21]的结果预期为game1

您看到的123,...是您正在记录的Array push calls的结果,每次都会产生数组的长度

答案 4 :(得分:2)

"love is like a river".length20,因此您将从i=25开始直到i=21

[1,2,3,4,5]表示每个循环length的{​​{1}}。

要查看game1值:

game1

结果:for(i=0; i<game1.length; i++) { console.log(game1[i]); }

答案 5 :(得分:1)

让我们首先分解您的代码,首先是您存储在变量中的 new Array() 构造函数 的Game1

var game1 = new Array();

此时,您所拥有的只是一个 数组,它已存储在变量中,以便以后使用。顺便提一下,这相当于数组文字 var game1 = []

让我们一步一步到您的代码的下一部分,这是一个 for() 循环:

<强> for (i = 25; i > "love is like a river".length; i--) {}

此循环在上限25 处初始化,并向下递减到下限<20> ,由 length() <设置/ strong> 属性 条件 字符串。在此循环中,您有语句

console.log(game1.push(i));

方法 push() 数组的末尾添加一个或多个元素,返回 数组的新长度到堆栈。此方法依赖于 length属性来确定其注入点。因此,在迭代之前, game1 堆栈目前处于 0 ,因为您从未使用任何值填充数组 。当您执行迭代时, push() 方法会在每个步骤中向堆栈添加 undefined 值,通过增加< em> array 长度 1

这可以通过使用单个数字参数调用 game1 变量来说明,这将设置的初始大小阵列。这是一个例子:

var string = 'love is like a river';

var game1 = new Array(15);

for (i = 25; i > string.length; i--) {
  console.log(game1.push(1));
}

如您所见,我将数字参数 15 传递给 new Array() 构造函数它将初始 game1 长度堆栈设置为15.因为我们从 25 (i = 25)减少到 20 (string.length)我们迭代 5 次,产生预期结果:[16,17,18,19,20]。

如果您正在寻找[6,7,8,...,25]的结果,您可以调整 for() 循环 < strong>递增而不是递减并将intitializer设置为6.以下是它的样子:

var s = "love is like a river";

for (i = 6; i <= s.length + 5; i++) {
  console.log(i);
}