2014-09-12 4 views
0

Если у меня есть 3 массива:For Loop из нескольких массивов

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

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

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

Как бы я структурировать цикл в CoffeeScript, так что результирующий контур будет генерировать:

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

Спасибо за ваши идеи!

+0

В чем именно должно выглядеть 'someThing'? У вас действительно есть переменная, называемая 'first', или вы имеете в виду, что' someThing.first' должен быть '{x: parentX [0], y: parentY [0]}'? –

+0

'someThing' - это просто переменная, содержащая группу слоев, поэтому я пытаюсь получить доступ к первому слою в группе (слои называются« первым »,« вторым »и« третьим »и т. Д.) И установите его координату x, затем установите ее координату y. Мне нужно сделать это таким образом, основываясь на структуре, в которой я работаю. Спасибо за тонну за любые идеи! Поистине оцените вашу помощь до сих пор и извиняюсь, если она неясна изначально. –

ответ

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 не имеет возможности динамически обращаться к именам локальных переменных.

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 всегда петли вычисляться массивы, так что вы застряли с predeclaring результата, если вы хотите использовать цикл.

Конечно, если вы хотите один оператор, можно использовать reduce (который является то, что вы обычно в конечном итоге, используя, если вы хотите «итерации, который возвращает объект, не являющийся массивом»):

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

Демо: http://jsfiddle.net/ambiguous/cr8dpf0h/

+0

Спасибо тонну @mu слишком коротка. Я не очень разбираюсь в js-выходе, так как я работаю в фреймворке, написанном в coffeescript. На самом деле я просто хочу, чтобы в произведении говорилось «something.first.x = first.firstX» в coffeescript, но я понятия не имею, как это сделать. Спасибо за ваши идеи, которые я многому научился из первоначального ответа. Любой дополнительный вход оценивается! –

+0

Я все еще не уверен, каким должен быть конечный результат. Вы говорите 'something.first.x = first.firstX', но не существует« first' в любом месте (кроме как в строке «parent [0]'), поэтому этот пример не имеет смысла. –

+0

Спасибо @mu слишком коротка. Извините, если то, что я просил, было неясно. Да, это именно то, что я пытаюсь выполнить. Возьмите значение из строки в массиве и создайте инструкцию из этого значения: для каждой строки в конструкторах конструктора массива 'parent', например' something.parent [0]. x = parent [0] .firstX' и 'something.parent [0] .y = parent [0] .firstY'. Извиняюсь за то, что я неясно изначально .. Я очень ценю ваши мысли! –

Смежные вопросы