For Multiple from Multiple Arrays

时间:2014-09-12 21:39:11

标签: javascript arrays for-loop coffeescript

如果我有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

感谢您的想法!

2 个答案:

答案 0 :(得分:0)

我现在不是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没有任何方法可以动态访问本地变量名。

答案 1 :(得分:0)

我猜你想要输出是这样的:

{
  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/