Я пытаюсь создать что-то похожее на следующее:
Учитывая HINTS = ["a", "s", "d", "f", "g", "h", "j", "k", "l", ";"]
, тогда allHints(21)
должен дать массив, похожий на:
["a", "s", "d", "f", "g", "h", "j", "k", "l", ";", "aa", "as", "ad", "af", "ag", "ah", "aj", "ak", "af"..."sa", "ss", "sd"...]
То есть все элементы соединялись один за другим для создания отдельных комбинаций. Я хотел бы написать это, используя какую-то рекурсию, если это возможно, поскольку похоже, что проблема склонна решаться таким образом.
Мое решение состояло в том, чтобы вложить два цикла for
, повторяющих каждую комбинацию по 9 (учитывая, сколько существует подсказок), но, похоже, он застревает где-то во второй раз. Я не слишком знаком с синтаксисом Coffeescripts for
, но я пробовал что-то похожее на:
allHints = ->
for i in [0...anchors]
do (i) ->
if i > 9
(for y in [0...i % 9]
do (y) ->
#changing this to HINTS[Math.round(i / 10)] as it should be produces weird results
HINTS[y] + HINTS[i % 9 - 1])[0]
else
HINTS[i]
console.log allHints 19
Но, к сожалению, это дает undefined
для последнего элемента. Может ли кто-нибудь помочь мне понять, как правильно использовать циклы для создания массива? Вот суть для справки.
do (i) ->
иdo (y) ->
необязательно. Вам нужно использовать значения захвата таким образом только в том случае, если вы определяете внутреннюю функцию в цикле, которая ссылается наi
илиy
и которая будет вызываться асинхронно (например,setTimeout ((i) -> console.log i), 100
). - person Trevor Burnham   schedule 16.08.2011