基本的JavaScript循环问题

时间:2017-01-23 14:36:39

标签: javascript loops for-loop

我是JavaScript编程的新手。在我们大学,我们刚刚开始学习JavaScript循环。所以这是一个使用for循环的代码:

var i;
var x = new Array();
var y = new Array(1, 1, 0, 3, 5);
for (i = 0; i < y.length; i++) {
    x[y[i]] = y[i];
}

我知道这样的代码会将变量x生成为值为

的数组
0, 1, undefined, 3, undefined, 5

我不明白它背后的逻辑。有人可以帮帮我吗?

5 个答案:

答案 0 :(得分:2)

让我们先简化一下,然后展开以使其更清晰:

i === 0

首次评估时,key === y[0]1x。现在我们有了密钥,我们将把密钥作为值分配给索引处的y数组,该索引是存储在i数组中索引x[y[0]] = y[0]的数字。所以x[1] === 1为此{{1}}。

嗯,重复一遍。

答案 1 :(得分:1)

您必须意识到数据放在数组X 中的位置取自数组Y

由于数组Y 只有以下数字(表示位置): 0,1,3,5 ,位置 2 数组X

中未定义 4

var i;
var x = new Array();
var y = new Array(1, 1, 0, 3, 5);
for (i = 0; i < y.length; i++) {
    console.log("Index taken from ARRAY Y where number will be put in ARRAY X: " + y[i]);
    x[y[i]] = y[i];
}

答案 2 :(得分:1)

好的,让我们逐个循环:

I = 0

x[1] = 1 //because y[0] = 1

I = 1

x[1] = 1 //because y[1] = 1

I = 2

x[0] = 0 //because y[2] = 0

I = 3

x[3] = 3 //because y[3] = 3

i = 4

x[5] = 5 //because y[4] = 5

所以你在x中为索引0,1,3和5设置了值,而不是2和4,这就是为什么这些值是undefined

答案 3 :(得分:0)

因为您没有通过索引递增它。您正在根据y数组的索引值设置索引。

所以你在循环中所做的是

x[1] = 1  // i = 0;
x[1] = 1  // i = 1;
x[0] = 0  // i = 2;
x[3] = 3  // i = 3;
x[5] = 5  // i = 4;

没有2或4的值,因此这些索引从未定义过,所以它是未定义的。

你想要的是

for (i = 0; i < y.length; i++) {
    x[i] = y[i];
}

答案 4 :(得分:0)

尝试记下每次迭代,看看x在后​​续步骤中的变化情况。

START           //                 []
x[y[0]] = y[0]; // x[1] = 1;       [undefined, 1]
x[y[1]] = y[1]; // x[1] = 1;       [undefined, 1]
x[y[2]] = y[2]; // x[0] = 0;       [0, 1]
x[y[3]] = y[3]; // x[3] = 3;       [0, 1, undefined, 3]
x[y[4]] = y[4]; // x[5] = 5;       [0, 1, undefined, 3, undefined, 5]