【问题标题】:Is there a JavaScript equivalent to Python's for loops?是否有与 Python 的 for 循环等效的 JavaScript?
【发布时间】:2015-03-14 02:45:47
【问题描述】:

所以我很失望地发现 JavaScript 的 for ( var in array/object) 不等同于 python 的 for var in list:

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

0, 
1,
2,
... 

与 Python 一样,您正在迭代索引所指向的值,例如

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

是否有等效于 Python 循环机制的标准 JavaScript?

免责声明:

我知道 for (var in object) 构造旨在用于遍历字典中的键,而不是通常遍历数组的索引。我在问一个与我不关心顺序(或非常关心速度)并且不想使用 while 循环的用例有关的特定问题。

【问题讨论】:

  • Array.prototype.forEach。无论如何,您不应该使用for ... in 来遍历 JavaScript 中的数组。
  • 为什么?慢了多少?我不在乎订单。
  • 未来,可能是for..of loops
  • 它是单一的并且有可能引入奇怪的错误。 JavaScript 是一种不同于 Python 的编程语言。

标签: javascript python loops for-loop iterator


【解决方案1】:

在下一版本的 ECMAScript(ECMAScript6 aka Harmony)中将是for-of construct

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

for-of 可用于迭代各种对象、数组、映射、集合和自定义可迭代对象。从这个意义上说,它非常接近 Python 的 for-in

【讨论】:

  • @FrancescoE。 for of 可用于迭代 ES6 中也引入的各种集合:Set、Maps 和自定义迭代器!
【解决方案2】:

对于一个数组,最相似的是forEach循环(当然索引是可选的)

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

所以你会得到以下输出:

1
0
2
1
3
2
4
3

【讨论】:

    【解决方案3】:

    我不确定我是否看到了很大的不同。访问给定索引/键的值很容易

    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));
    });
    

    【讨论】:

    • 从 python 到 javascript,这对我来说最有意义。 +1
    猜你喜欢
    • 2014-09-01
    • 2010-12-29
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-04
    • 2012-11-21
    • 1970-01-01
    相关资源
    最近更新 更多