基本JavaScript循环出现问题

基本JavaScript循环出现问题,javascript,loops,for-loop,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]; } 我不明白背后的逻辑。谁能帮帮我吗?因为你不是在按索引递增它。您正在根据y数组的索引值设置索引 因此,您在循环中所做的是 x[1] = 1

我是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];
}

我不明白背后的逻辑。谁能帮帮我吗?

因为你不是在按索引递增它。您正在根据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];
}
for(i=0;i
因为您没有按索引递增它。您正在根据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];
}
for(i=0;i
首先让我们将其简化一点,并进行扩展以使其更清晰:

var x = new Array();
var y = new Array(1, 1, 0, 3, 5);
for(let i = 0; i < y.length; i++){
    let key = y[i];
    x[ key ] = y[i];
}
var x=newarray();
var y=新数组(1,1,0,3,5);
for(设i=0;i
在第一次求值时,
i==0
,因此
key==y[0]
1
。现在我们有了键,我们将把键作为一个值分配给索引处的
x
数组,该索引是存储在索引处
i
y
数组中的数字。因此
x[y[0]]=y[0]
,因此
x[1]==1


Wrince,重复。

首先让我们将其简化一点,并扩展以使其更清晰:

var x = new Array();
var y = new Array(1, 1, 0, 3, 5);
for(let i = 0; i < y.length; i++){
    let key = y[i];
    x[ key ] = y[i];
}
var x=newarray();
var y=新数组(1,1,0,3,5);
for(设i=0;i
在第一次求值时,
i==0
,因此
key==y[0]
1
。现在我们有了键,我们将把键作为一个值分配给索引处的
x
数组,该索引是存储在索引处
i
y
数组中的数字。因此
x[y[0]]=y[0]
,因此
x[1]==1


Wrince,重复。

您必须意识到,将数据放入数组X的位置取自数组Y

由于数组Y只有以下数字(表示位置):0、1、3、5,因此24将在数组X中未定义位置

vari;
var x=新数组();
var y=新数组(1,1,0,3,5);
对于(i=0;i}
您必须意识到,数据放入数组X的位置取自数组Y

由于数组Y只有以下数字(表示位置):0、1、3、5,因此24将在数组X中未定义位置

vari;
var x=新数组();
var y=新数组(1,1,0,3,5);
对于(i=0;i}
好的,让我们逐一循环:

i=0
x[1]=1//因为y[0]=1

i=1
x[1]=1//因为y[1]=1

i=2
x[0]=0//因为y[2]=0

i=3
x[3]=3//因为y[3]=3

i=4
x[5]=5//因为y[4]=5


因此,您在
x
中为索引0、1、3和5设置了值,而不是2和4,这就是为什么这些值
未定义的原因

好的,让我们逐个循环:

i=0
x[1]=1//因为y[0]=1

i=1
x[1]=1//因为y[1]=1

i=2
x[0]=0//因为y[2]=0

i=3
x[3]=3//因为y[3]=3

i=4
x[5]=5//因为y[4]=5


因此,您在
x
中为索引0、1、3和5设置了值,而不是2和4,这就是为什么这些值是
未定义的

尝试写下每个迭代,并查看
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]

试着写下每次迭代,看看
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]

你到底不明白什么?
i=0->x[1]=1,i=1->x[1]=1,i=2->x[0]=0,i=3->x[3]=3,i=4->x[5]=5
所以x[2]和x[4]永远不会被忽略set@mplungjan哇,如果OP在破译他所看到的代码时遇到困难,这将更加令人困惑不。他是一名大学生,你到底不明白什么?
i=0->x[1]=1,i=1->x[1]=1,i=2->x[0]=0,i=3->x[3]=3,i=4->x[5]=5
所以x[2]和x[4]永远都不会被忽略set@mplungjan哇,如果OP在破译他所看到的代码时遇到困难,这将更加令人困惑不。他是一名大学生非常感谢你的解释!非常感谢您的解释!我读了托马斯的文章,然后又回到了你的文章。非常感谢你!我读了托马斯的文章,然后又回到了你的文章。非常感谢你!提供有用信息的我花了一段时间才弄到,但现在已经非常清楚了。非常感谢。提供有用信息的我花了一段时间才弄到,但现在已经非常清楚了。非常感谢。试过你的代码,经过一番努力,我明白了。非常感谢。试过你的代码,经过一番努力,我明白了。非常感谢。