2015-01-15 70 views
4

所以我很失望,發現JavaScript的for (var in array/object)不等於蟒蛇for var in list:是否存在與Python for循環相當的JavaScript?

在JavaScript中,您正在迭代索引本身,例如

0, 
1, 
2, 
... 

與Python一樣,您正在迭代索引指向的值,例如,

"string var at index 0", 
46, 
"string var at index 2", 
["array","of","values"], 
... 

是否有一個標準的JavaScript等價於Python的循環機制?

聲明:

我知道,對於(VAR在對象)構建體旨在被用於迭代在字典中的鍵,而不是通常在陣列的索引。我提出了一個具體的問題,涉及到我不關心順序(或者非常關心速度)的用例,只是不想使用while循環。

+3

有'Array.prototype。 forEach'。而且你不應該使用'for ... in'來重複JavaScript中的數組。 – Pointy 2015-01-15 16:19:32

+0

爲什麼?它有多慢?我不關心訂單。 – LukeP 2015-01-15 16:22:11

+0

繼續前進,可能['for..of' loops](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of)。 – 2015-01-15 16:22:41

回答

6

一個陣列最相似的是foreach循環(當然指數是可選的)

[1,2,3,4,].forEach(function(value,index){ 
    console.log(value); 
    console.log(index); 
}); 

所以,你會得到下面的輸出:

1 
0 
2 
1 
3 
2 
4 
3 
4

在下一版本ECMAScript(ECMAScript6 aka Harmony)將爲for-of construct

for (let word of ["one", "two", "three"]) { 
    alert(word); 
} 

for-of可用於遍歷各種對象,數組,地圖,集合和自定義可迭代對象。從這個意義上說,它非常接近Python的for-in

+0

不是真的需要,但仍然是一個很酷的功能! – 2015-01-15 16:39:06

+1

@FrancescoE。 for可以用於迭代ES6中引入的各種集合:Set,Maps和自定義迭代器! – phadej 2015-01-15 16:45:10

+0

對,所以它會很有幫助! – 2015-01-15 17:42:02

0

我不確定我看到了很多差異。這很容易給定的索引來訪問值/關鍵

var list = [1,2,3,4,5]; 

// or... 

var list = {a: 'foo', b: 'bar', c: 'baz'}; 
for (var item in list) console.log(list[item]); 

和提到的,你可以使用的forEach對數組或對象......下面有一個OBJ:

var list = {a: 'foo', b: 'bar', c: 'baz'}; 

Object.keys(list).forEach(function(key, i) { 
    console.log('VALUE: \n' + JSON.stringify(list[key], null, 4)); 
});