【问题标题】:For Loop from Multiple Arrays来自多个数组的 For 循环
【发布时间】:2014-11-07 03:53:33
【问题描述】:

如果我有 3 个数组:

parent = [
    'first', 
    'second', 
    'third', 
    'fourth', 
]

parentX = [
    'firstX',
    'secondX',
    'thirdX',
    'fourthX',
]

parentY = [
    'firstY',
    'secondY',
    'thirdY',
    'fourthY',
]

我将如何在 coffeescript 中构建我的 for 循环,以便生成循环:

someThing.first.x = first.firstX
something.first.y = first.firstY

感谢您的想法!

【问题讨论】:

  • someThing 到底应该是什么样子?你真的有一个名为first 的变量还是你的意思是someThing.first 应该是{ x: parentX[0], y: parentY[0] }
  • someThing 只是一个包含一组图层的变量,所以我试图访问组中的第一层(这些图层被命名为'first''second''third' 等)并设置它的 x 坐标,然后设置它的 y 坐标。我需要根据我正在工作的框架以这种方式进行操作。非常感谢您的任何想法!非常感谢您迄今为止的帮助,如果最初不清楚,请道歉。

标签: javascript arrays for-loop coffeescript


【解决方案1】:

我现在不会Coffeescript,这是纯Javascript,希望你可以自己翻译:

for (var i = 0; i < parent.length; i++) {
    // I assume parentX and parenthY are the same length
    for (var j = 0; j < parentX.length; j++) {
        something[parent[i]].x = window[parent[i]][parentX[j]];
        something[parent[i]].y = window[parent[i]][parentY[j]];
    }
}

这仅在firstsecond 等是全局变量时才有效,因为它使用window[variableName] 来访问它们。 Javascript 没有任何方法可以动态访问局部变量名。

【讨论】:

    【解决方案2】:

    我猜你希望输出是这样的:

    {
      first:  { x: 'firstX',  y: 'firstY'  },
      second: { x: 'secondX', y: 'secondY' },
      third:  { x: 'thirdX',  y: 'thirdY'  },
      fourth: { x: 'fourthX', y: 'fourthY' }
    }
    

    如果是这样,那么您将使用与 JavaScript 相同的方式构建它:声明一个对象来保存结果,然后迭代 parent,同时从所有三个数组中提取内容:

    obj = { }
    for e, i in parent
        obj[e] = { x: parentX[i], y: parentY[i] }
    

    CoffeeScript 循环总是计算为数组,所以如果你想使用循环,你就不得不预先声明结果。

    当然,如果你想要一个语句,你可以使用reduce(如果你想要“一个返回非数组对象的迭代”,你通常最终会使用它):

    obj = parent.reduce(
        (m, e, i) -> m[e] = { x: parentX[i], y: parentY[i] }; m
        { }
    )
    

    演示:http://jsfiddle.net/ambiguous/cr8dpf0h/

    【讨论】:

    • 非常感谢 @mu 太短了。我并不真正关心 js 输出,因为我正在使用咖啡脚本编写的框架。真的我只想让输出在coffeescript中说something.first.x = first.firstX,但我不知道如何做到这一点。感谢您的想法,我从最初的答案中学到了很多东西。任何额外的意见表示赞赏!
    • 我仍然不确定最终结果应该是什么。你说something.first.x = first.firstX,但任何地方都没有firstparent[0] 中的字符串除外),所以这个例子没有意义。
    • 谢谢@mu 太短了。对不起,如果我问的不清楚。是的,这正是我想要完成的......从数组中的字符串中获取值并根据该值构造一个语句:对于数组parent 中的每个字符串构造语句,例如something.parent[0].x = parent[0].firstXsomething.parent[0].y = parent[0].firstY。很抱歉最初不清楚。我非常感谢您的想法!
    • for 循环不就是这样做的吗?
    猜你喜欢
    • 1970-01-01
    • 2019-03-18
    • 2010-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-02
    • 2017-03-26
    • 2020-04-09
    相关资源
    最近更新 更多