2010-05-23 190 views
0

我有一個簡單陣列等:遍歷陣列,與打印字符串

var myArr=["one","two","three"]; 

一個我有一個計數循環,其由一個增加VAR i的值。

我想要做的就是從數組每次打印的下一個值循環運行時,旁邊的一個文本字符串,像這樣:

alert('value number '+myArr[i]+); 

但出於某種原因,我不能得到這個工作。 下面的代碼工作,所以我假設我不是調用計數器權:

alert('value number '+myArr[0]+); 
+0

能否請您發表您的代碼,這將有助於我們更好地理解它。 – 2010-05-23 16:56:13

回答

8

確保你正確地遞增循環計數器(它應該在零啓動和運行,直至指數最高在數組中),並且在alert行末尾的流浪+被刪除。

for (var i = 0; i < myArr.length; ++i) { 
    alert('value at index [' + i + '] is: [' + myArr[i] + ']'); 
} 
+0

我得到:「在索引[3]價值是:[undefined]」 – 2010-05-23 18:52:08

+1

爲(** var ** i = 0 – 2010-05-23 19:24:17

+0

已在我的情況下var)仍未定義... :( – 2010-05-23 19:37:53

1
for (i = 0; i < miArray.length; i++){ 
    alert('value number ' + myArr[i]); 
} 
0

通過 '未來價值',你的意思是當前索引+ 1的值?

for (var i=0; i < myArr.length; i++){ 
    console.log(myArr[i]); // value of current index 
    if (i !== myArr.length - 1) { // if on last index then there is no next value 
     console.log(myArr[i + 1]); // value of next index 
    }  
} 
+0

嗯 - 這段代碼實際上並沒有做任何事情,所以優化的Javascript引擎將完全刪除它。 – 2010-05-23 17:07:31

+0

myArr [i];是一個完全有效的表達式,但正如你所說 - 一個好的引擎可能會優化它遠離:) – 2010-05-23 17:21:26

0

你在想一個迭代器嗎?這是即將推出的標準,但它只支持JavaScript 1.7+,而目前只支持Firefox,並且您必須使用<script type="application/javascript;version=1.7"> ... Chrome將聲稱支持JavaScript 1.7,但它會實際上不支持任何東西[別問我爲什麼他們這樣做]

只是爲了證明這點:

function yourIterator(arrayToGoThrough) 
{ 
    for(var i = 0; i < arrayToGoThrough.length; i++) 
    { 
    yield arrayToGoThrough[i]; 
    } 
} 

var it = new yourIterator(["lol", "blargh", "dog"]); 
it.next(); //"lol" 
it.next(); //"blargh" 
it.next(); //"dog" 
it.next(); //StopIteration is thrown 

注意,那就是新的標準,你可能不希望使用它=)。 ..

你也可以「模擬」像這樣的迭代器:

function myIterator(arrayToGoThrough){ 
    this.i = 0; 
    this.next = function(){ 
    if(i == arrayToGoThrough.length) //we are done iterating 
     throw { toString: function(){ return "StopIteration"; } }; 
    else 
     return arrayToGoThrough[i++]; 
    } 
} 

如果您想使用當前的標準,你可以只通過你的陣列迭代

for(var i = 0; i < yourArr.length; i++) alert("yourArr["+i+"]: "+yourArr[i]);

+0

這種* JavaScript(TM)*特性,如yield,不是[ECMAScript]的一部分(http://www.ecma-international.org/publications/standards/Ecma-262。 htm)標準,它們僅適用於* Mozilla實現*(SpiderMonkey,Rhino)。國際海事組織,其他引擎,如V8(Chrome),JavaScripCore(WebKit)等...將永遠不會支持這些非標準功能。 – CMS 2010-05-23 20:19:50

0

相反的遍歷,使用內置函數:

function myFunction() { 
    var fruits = ["Banana", "Orange", "Apple", "Mango"]; 
    var x = fruits.valueOf(); 
    alert(x); 
} 
0

下面的代碼將工作用箭頭功能。簡單並減小了代碼

var myArr=["one","two","three"]; 
myArr.map((elements) => alert('value number' + " " + elements)); 
+0

只有當循環的唯一目的是遞增計數器時,這纔有效且有意義。所提到的循環可以用於對數組中的項目進行額外的工作。 – 2017-09-27 11:43:21

0

你的第二個選項alert('value number '+myArr[0]+);,因爲你在這種情況下工作定義數組索引0相似,但myArr,該[I]不工作,因爲我沒有,如果分配I = 0,則第一個值的工作定義的話,但主要的解決方案是使用循環和增量計數器,並獲得總數組使用myArr.length,否則哪些時間循環運行你不知道。

for (var i = 0; i < myArr.length; ++i) { 
    alert('Array value at index [' + i + '] : [' + myArr[i] + ']'); 
} 

瞭解更多信息

https://www.w3schools.com/js/js_loop_for.asp