【问题标题】:Why doesn't this coffee-script print out?为什么这个咖啡脚本不打印出来?
【发布时间】:2012-10-15 00:43:16
【问题描述】:

所以当索引为0时,我想打印出来:

a = [ 1, 2, 3 ] 

for i of a
    if i == 0
        console.log a[i]

但是没有输出。

i == 0 永远不会是真的......

【问题讨论】:

    标签: coffeescript


    【解决方案1】:

    i 将索引作为字符串返回,如果将它们解析为整数,它将起作用

    a = [ 1, 2, 3 ] 
    
    for i of a
        if parseInt(i) == 0
            console.log a[i]
    

    【讨论】:

    • 是的,你是对的!几分钟前我自己才想出来的……哈哈还是谢谢你:)
    • @ZhangXiao 但是 kurmiau 的答案在你之前发布了。所以,我建议删除你自己的答案,并接受这个。
    【解决方案2】:

    这是因为i 只会是 1、2 或 3,因为您循环遍历 a 中的项目,而不是索引号。

    按照您上面描述的方式工作:

    a = [ 1, 2, 3 ] 
    
    for i in [0..a.length]
        if i == 0
            console.log a[i]
    

    【讨论】:

    • 嗨,感谢您的回答 :) 但是我在索引上循环。请注意,我使用的是ofin
    • @ZhangXiao:你不应该用of来循环数组,用in循环数组。
    • @muistooshort 谢谢。我了解其中的区别,在这种情况下,我使用 of :)
    • @muistooshort 哦...我没有意识到这一点。你能解释一下为什么吗?在这种情况下,我正在做的是迭代一个数组,对于第一个元素我想做一些特别的事情。
    【解决方案3】:

    您不应该使用of 来循环数组,而应该使用in。来自fine manual

    理解也可用于迭代对象中的键和值。使用of 表示理解对象的属性而不是数组中的值。

    yearsOld = max: 10, ida: 9, tim: 11
    
    ages = for child, age of yearsOld
      "#{child} is #{age}"
    

    所以你试图迭代数组对象的 属性,而不是它的索引。

    您应该在循环中使用其中一种:

    for e, i in a
        if(i == 0)
            console.log(a[i])
    
    for e, i in a 
        console.log(e) if(i == 0)
    
    console.log(e) for e, i in a when i == 0
    
    #...
    

    或者,既然你有一个数组和一个数字索引,为什么不跳过循环直接进入重点:

    console.log(a[0])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-09
      • 1970-01-01
      • 2012-03-09
      • 1970-01-01
      • 1970-01-01
      • 2018-01-25
      • 1970-01-01
      相关资源
      最近更新 更多