【问题标题】:Javascript equivalent to "for x in y"相当于“for x in y”的 Javascript
【发布时间】:2021-04-08 13:28:06
【问题描述】:

我一直在努力寻找与 Python 的“for x in y”等效的 Javascript。例如,我想将偶数推入一个空数组,但我不知道如何编写代码来执行此操作。我一直在这样做:

var numbers = [ 1, 2, 3, 4, 5]
var even = []
for(var x = 0; x < numbers.length; x++){
     if(x % 2 == 0){
         even.push(x)
     }
}

如果数字是字符串,字符串也一样:

var numbers = [ "one", "two", "three"]
var even = []
for(var x = 0; x < numbers.length; x++){
     if(x == "two"){
         even.push(x)
     }
}

我注意到每次我输入它时,它只显示 x 作为数组的索引,但我想访问元素。

【问题讨论】:

  • numbers[x] 获取属于索引的项目x
  • for ... of 是 Python 的 for .. in 的直接惯用 JS 等价物。但是,对于这个简单的用例,我更喜欢在数组上简单地使用 filter 方法 - 没有任何循环。
  • for(let x of [1,2,3]) { console.log(x) } 有什么问题
  • @RandyCasburn for/in 应该只用于对象,而不是数组,因为它迭代所有自己的属性,而不仅仅是索引的。
  • 那是一个“准备、开火、瞄准”的例子:-)

标签: javascript python arraylist


【解决方案1】:

for (let x of numbers) JS statement 是你要找的。​​p>

x 将遍历值而不是索引。

const numbers = [ 1, 2, 3, 4, 5]
const even = []
for(const x of numbers){
     if(x % 2 === 0){
         even.push(x)
     }
}

附言

even = numbers.filter(el =&gt; el % 2 === 0)也可以用,简单多了。

您可以找到文档here

【讨论】:

    【解决方案2】:

    当您将 x 推送到列表时,它将推送第一个列表的 2,4,...,长度。你需要使用

    var numbers = [ 1, 2, 3, 4, 5]
    var even = []
    for(var x = 0; x < numbers.length; x++){
        if(x % 2 == 0){
            even.push(numbers[x])
        }
    }
    

    【讨论】:

      【解决方案3】:

      如果您使用a generatora for..of loop,您可以实现与 Python 语法非常相似的功能。

      function* filter(predicate, iterable) {
        for (let item of iterable)
          if (predicate(item))
            yield item;
      }
      
      const isEven = x => x % 2 === 0;
      
      
      var numbers = [1, 2, 3, 4, 5]
      var even = []
      for(let x of filter(isEven, numbers)){
        even.push(x)
      }
      
      console.log(even);

      更多信息,您可以查看the MDN article on iterators and generators

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-05-31
        • 1970-01-01
        • 2017-12-21
        • 2011-06-18
        • 1970-01-01
        • 1970-01-01
        • 2021-08-24
        • 2021-03-20
        相关资源
        最近更新 更多