【问题标题】:How to write 'for-in' in JavaScript ? [duplicate]如何在 JavaScript 中编写“for-in”? [复制]
【发布时间】:2012-11-11 13:47:04
【问题描述】:

可能重复:
Functional approach to basic array construction

我是 js 新手。我只想知道哪种方法是正确的。下面我发布了我的代码。

var doubles = (i*20 for (i in it));
var doubles ={i*20 for (i in it)};

谢谢

【问题讨论】:

标签: javascript


【解决方案1】:

在遍历数组时应该使用普通的 for 循环。 for...in 用于迭代对象属性。

所以,正确的做法是:

for (var i = 0; i < array.length; ++i) {
    // do something
}

迭代对象属性:

for (var prop in obj) {
     // do something with prop
}

【讨论】:

  • 你怎么知道it不是一个对象? :-)
  • @Bergi 你真的不知道,数组就是对象。因此,如果您将数组传递给for in,它可能会遍历索引和其他键。也就是说,如果您将对象传递给函数,您应该期望将对象传递给 for。如果你不知道你的功能是什么,那就另当别论了。
  • 我没有。这是一个假设;)
  • @Davorin ,它是对象。你的代码解决了我的问题,但如果可能的话,我想知道如何以我的方式去做。只是好奇!
  • @minhaz,我认为这在纯 JS 中是不可能的,如果你想使用 comprehensions,你应该试试 CoffeeScript。
【解决方案2】:

假设it是一个数组,可以使用.map()

var doubles = it.map(function(i){ return i*20; });

您可能还想看看how to write List/Array comprehensions in JavaScript


假设您要使用 Mozilla 的 Generator expressions(其中 it 是现有的 Iterator),您需要使用方括号:

var twentyfolds = [i*20 for (i in it)];

【讨论】:

    【解决方案3】:

    为了将来参考,ECMAScript 6(又名 Harmony)很可能会引入 a new sane way of iterating over objects (arrays included)

    for(var x of array) {
        // do something with x
    }
    

    它还将array comprehensionsgenerator expressions引入核心语言:

    var arr = [1, 2, 3];
    console.log([i*20 for (i of arr)])
    

    【讨论】:

      【解决方案4】:

      这两个选项都是语法错误。如果 'it' 是一个列表,那么您可以使用 for 循环或 forEach 方法遍历它。但是,在您的情况下,您似乎真的在寻找 map 方法。

      var doubles = it.map(function (i) { return i * 20; });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-12-08
        • 1970-01-01
        • 2013-01-10
        • 2018-08-31
        • 2013-08-25
        • 2019-07-16
        • 2019-09-30
        • 1970-01-01
        相关资源
        最近更新 更多