Javascript:基本for循环?

时间:2015-06-03 20:15:17

标签: javascript for-loop

我刚刚为一所编程学校完成了某种形式的能力考试,除了这个问题我得到了正确的答案,虽然看起来真的很容易,但我无法得到它。有什么想法吗?

请注意以下代码。

var x = [1,5,7,13];
for(i=0; i < x.length; i++)
{
x[i] = x[3-i] + 2;
}

一旦程序完成,x中会有什么?

a [3,7,9,15]
b [15,9,11,3]
c [15,9,7,3]
d [15,9,11,17]

3 个答案:

答案 0 :(得分:1)

这里的关键是你正在更新你正在阅读的同一个数组。 (注意:通常我会考虑这种不好的做法,而且我看到很多程序员陷入了这个陷阱 - 很容易误解代码)

要意识到的第一件事是x[3-i]基本上读取当前索引的另一端。为了更通用,它应该是x[(x.length-1)-i],但在这种情况下3是硬编码的。

现在,第一轮很容易:13+2 = 15。 13因为第一个元素的另一端是最后一个元素:

x = [15,5,7,13]
      ▲      │ this+2
      └──────┘ 

在第二轮中,我们将5替换为7+2 = 9

x = [15,9,7,13]
        ▲ │ this+2
        └─┘ 

在第三轮中,我们发现自己做了一些最初并不明显的事情。我们不是将7替换为5+2,而是将其替换为9+2,而不是因为我们已经将9替换为9:

x = [15,9,11,13]
        │ ▲
 this+2 └─┘ 

现在我们最后使用上面相同的推理用15+2替换最后一个元素:

x = [15,9,11,17]
      │       ▲
      └───────┘ 
     this+2

答案 1 :(得分:0)

答案是d

第一次循环

x [0] = 13 + 2 = 15

第二个循环

x [1] = 7 + 2 = 9

第三循环

x [2] = 9 + 2 = 11

第四循环

x [3] = 15 + 2 = 17

x = {15,9,11,17}

答案 2 :(得分:0)

要弄清楚这一点,您必须了解x[]用于引用数组的特定索引。例如:

var x = [5,6,7];

在这种情况下,假设基于0索引的数组,x[0]将等于5

知道这一点,让我们打破你的循环。我们首先逐步填写变量名称而不是变量值,以避免混淆以下变量。

var x = [1,5,7,13];
for(0=0; 0 < x.length; 0++)
{
x[0] = x[3-0] + 2;
}

对于第一次迭代,一切都开始变得更加清晰,因为你可以告诉它现在它将x[0](数组中的第一个值)设置为等于x[3-0](这会是x[3],由于0索引数组而成为13,加上2. 13 + 2 = 15。第一个数字是15。

var x = [1,5,7,13];
for(1=1; 1 < x.length; 1++)
{
x[1] = x[3-1] + 2;
}

让我们再试一次! x[3-1]x[2]相同,7; 7 + 2 = 9。您的第二个号码是9

遵循相同的逻辑,您可以看到循环如何运作并理解它如何引用数组的值。