2011-06-13 71 views
8

我通常使用python編寫腳本/程序,但最近開始使用JavaScript進行編程,並且在處理數組時遇到了一些問題。JavaScript Array

在蟒蛇,當我創建一個數組和y中使用對於x我得到這個:

myarray = [5,4,3,2,1] 
for x in myarray: 
    print x 

,我得到的預期輸出:

5 
4 
3 
..n 

但我的問題是當使用JavaScript時,我得到了一個不同的和完全意想不到的(對我)結果:

var world = [5,4,3,2,1] 
for (var num in world) { 
    alert(num); 
} 

和我得到的結果是:

0 
1 
2 
..n 

我怎樣才能得到JavaScript來輸出NUM像蟒蛇數組中的價值,爲什麼會出現這種情況?

+1

重複,回答這裏詳:http://stackoverflow.com/questions/3010840/loop-through-array-in-javascript – galambalazs 2011-06-13 12:40:44

回答

10

JavaScript和Python是不同的,你可以用不同的方式在它們之間做事。

在JavaScript中,你真的應該(幾乎)總是遍歷數組以數字指標:

for (var i = 0; i < array.length; ++i) 
    alert(array[i]); 

了「......在」構建在JavaScript給你鍵的對象 ,而不是的值。使用數組是很棘手的,因爲它在數組上作爲一個對象進行操作,對待它與其他類型的對象沒有區別。因此,如果數組對象具有其他屬性—,這是完全「合法」且並不罕見的—除了「正常」數組內容的索引之外,您的循環將會選擇這些屬性。

+3

+ 1,不要在數組中使用'for..in'。 – Shurdoof 2011-06-13 12:13:26

7

變量num包含數組項的索引,而不是數值。所以,你會想:

alert(world[num]) 

檢索值

6

的對...循環VAR在JavaScript把鑰匙放在了變量,而不是實際值。因此,使用VAR時...你應該做這樣的事情:

var world = [5, 4, 3, 2, 1]; 
for (var key in world) { 
    var value = world[key]; 
    alert(key + " = " + value); 
} 

而且請注意,當你使用對象而不是數組循環的這種方式,最好使用。對於陣列使用常見的:

for (var i = 0, j = arr.length; i < j; i++) { ... } 

或者,如果你的目標最新的瀏覽器可以使用陣列的foreach方法:

var arr = [1, 2, 3]; 
arr.forEach(function(num) { 
    alert(num); 
}); 
+1

+1 for forEach() – 2011-06-13 13:57:21

1

for...in循環遍歷所有的關鍵要素;而不是價值。

我會建議您在使用in操作num成爲一個關鍵你使用

for(var i=0; i<arr.length; i++){ 
    alert(arr[i]); 
} 
1

。因此,只需使用此鍵即可從數組中獲取值。

var world = [5,4,3,2,1] 
for (var num in world) { 
    alert(world[num]); 
} 
1

試試這個。

var world = [5,4,3,2,1] 
for(var i=0;i<world.length;i++){ 
    alert(world[i]) 
} 

因爲在你的情況下javascript是打印元素的索引而不是值。

1

你得到的結果僅僅是元素的索引,如果你想獲得元素值

你的代碼應該喜歡這個

var world = [5,4,3,2,1] 
for (var num in world) { 
    alert(world[num]); 
} 
1

forin迭代在JavaScript的工作只爲object數據類型。它的工作方式是讓它遍歷對象的attributesarrays在JavaScript中爲objects,但forin僅適用於其屬性,而不適用於數組值。

例如,你可以定義數組作爲這樣的:

var arr = [1,2,3]; 

而且你可以指定屬性這個數組,因爲它實際上是一個對象:當您使用forin

arr.foo = "bar"; 
arr["1"] = 2; 

現在迭代方法,你將能夠遍歷我們剛剛分配的屬性;

for(var i in arr) console.log(i); 

要遍歷實際的數組值,您需要使用for(var i=0; i<arr.length; i++)構造。

希望這會有所幫助。

1

在JavaScript中,建議循環與循環對象不同的數組。您正在使用對象循環,這可能會返回意外的結果(例如,如果使用自定義方法擴展Array.prototype,您也可以迭代這些循環,並且不保證數組的順序被保留)。有通過陣列很多方法可以循環使用它的index

// regular 
var arr = [1,2,3,4,5] 
    ,i 
; 
for (i=0;i<arr.length;i++) { 
    console.log(arr[i]); 
} 

// using while 
var arr = [1,2,3,4,5] 
    ,i = 0 
; 
while ((i = i + 1)<arr.length) { 
    console.log(arr[i]); 
} 

// using while reversed 
var arr = [1,2,3,4,5] 
    ,i = arr.length 
; 
while ((i = i - 1) > -1) { 
    console.log(arr[i]); 
} 

:爲什麼不使用i++i--?爲了避免混淆,索引超出 -errors的範圍並滿足的JSLint