我是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
我不明白它背后的逻辑。有人可以帮帮我吗?
答案 0 :(得分:2)
让我们先简化一下,然后展开以使其更清晰:
i === 0
首次评估时,key === y[0]
,1
或x
。现在我们有了密钥,我们将把密钥作为值分配给索引处的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)
好的,让我们逐个循环:
x[1] = 1 //because y[0] = 1
x[1] = 1 //because y[1] = 1
x[0] = 0 //because y[2] = 0
x[3] = 3 //because y[3] = 3
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]