2011-06-13 58 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