繁体   English   中英

如何在此处将项目添加到此javascript数组?

[英]How are items being added to this javascript array here?

查看初学者的javascript书籍,并尝试了解一个小的浏览器程序,该程序可使用用户输入来构建列表。 输入框将显示并输入字符串作为输入,直到他仅添加“”作为输入为止。 然后列表显示在浏览器中。

这是代码:

var userInput = " ";
var namesArray = new Array();

while ( (userInput = prompt("Enter name", " ")) != " ") {
    namesArray[namesArray.length] = userInput;
}

namesArray.sort();

var namesList = namesArray.join("<br />");

var listHolder = document.createElement('div');
var list = listHolder.innerHTML = namesList;
document.body.appendChild(listHolder);

我只是不了解作者将项目添加到数组的方式。 有人会介意解释namesArray [namesArray.length] = userInput如何构建数组吗?

另外这里有一个小提琴来尝试

提前谢谢!

基本上,.length是数组的大小,因此.length是数组中的下一个索引,尚无任何内容。 他只是将字符串添加到数组.length的末尾,这在数组的末尾创建了一个新位置。 .length - 1是数组的最后一个元素,因此.length将在数组的末尾创建一个新位置。 下一次通过循环时,长度将比上一次大一倍,因为您已向数组中添加了一个元素。

所以发生了什么,我们得到了一个while循环,该循环将继续询问名字,直到我们得到一个空的响应:

while ( (userInput = prompt("Enter name", " ")) != " ")

然后,它使用初始namesArray的长度来索引新值。

namesArray[namesArray.length] = userInput;

因此我们知道该数组最初是空的。 因此,在第一次运行时,长度将为零! 我们还知道索引为0是数组中的第一项。 因此,它将其作为第一项添加到数组。 之后,数组的长度现在为1(因为我们刚刚添加了一个项目)。 因此,在下一次迭代中,我们将新项目添加到索引为1的数组,将其长度增加为2。这将一直持续下去,直到我们打破while循环。

因此,如果将其分解,我们将更清楚地看到它:

//First iteration

newArray.length = 0;
newArray[newArray.length] = newArray[0]

//Second iteration

newArray.length = 1;
newArray[newArray.length] = newArray[0]

etc.

(userInput = prompt("Enter name", " ")) != " ") while循环的条件(userInput = prompt("Enter name", " ")) != " ")都将保持为真。

每次输入名称时,都会为长度索引分配名称。 每次分配名称时,长度都会增加。 结果,对于每个输入的名称,数组都会增加。

通常,您可以通过.push()方法轻松地将元素添加到数组中。 例如:

var ary = []; // empty array
ary.push('foo'); // the ary array now has one element, 'foo'

现在,数组索引从零开始,这意味着您将第一个元素称为[0],将第二个元素称为[1], .length 。但是, .length属性将返回数组中元素的实际数量。 因此,如果我们向数组中添加10个元素,则要求长度将使我们得到10

因此,编写该代码的人正在使用.length属性允许您定位尚不存在的数组元素-最后一个元素之后的元素。

例如,假设我们有一个包含10个元素的数组。 length属性将为10,但是最后一项的索引将为9,因为索引是从零开始的。 当该代码的作者这样做时:

namesArray[namesArray.length] = userInput;

他们还说的是namesArray[10] = userInput; ,然后将userInput分配给userInput的第11个位置(请记住,零索引)。

由于这样做可能会造成一些混乱,因此大多数程序员将只使用.push()方法,该方法会自动将您传递的值附加到数组的末尾,而无需指定索引。

由于数组的索引从零开始,因此数组中的最后一个元素始终具有索引

namesArray.length-1

因此,下一个可用的未使用索引始终等于

namesArray.length

您可以在此索引处安全地设置值,并知道它们将被添加到数组的末尾。

因此,您有以下数组:

var namesArray = new Array();

并且您可能知道可以像这样插入数组值:

namesAray[0] = 'first value';
namesAray[1] = 'second value';
namesAray[2] = 'third value';

现在,代码是这样的:

namesArray[namesArray.length] = userInput;

因此,这里的namesArray.length带给您数组的大小。 好的,如上所示,我已经在namesArray namesArray[0],namesArray[1], namesArray[2]添加了三个值。 因此,数组的当前大小为3, namesArray[namesArray.length]等于namesArray[3] ,现在在此插入输入值。

因此,像这样,代码while ( (userInput = prompt("Enter name", " ")) != " ") {新的数组值插入到由while ( (userInput = prompt("Enter name", " ")) != " ") {

希望你能理解。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM