簡體   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