如果我有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
感谢您的想法!
答案 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]];
}
}
这仅在first
,second
等是全局变量时才有效,因为它使用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
{ }
)