Перечисление:
arr.forEach (x, i) ->
... use x and i ...
zip
/ zipWith
(я узнал об этом у Хаскелла; я предполагаю, что в Python они означают одно и то же?):
zip = (arr1, arr2) ->
basic_zip = (el1, el2) -> [el1, el2]
zipWith basic_zip, arr1, arr2
zipWith = (func, arr1, arr2) ->
min = Math.min arr1.length, arr2.length
ret = []
for i in [0...min]
ret.push func(arr1[i], arr2[i])
ret
Некоторыепримеры (проверено):
zip([1, 2, 3], [4, 5, 6]) # => [[1, 4], [2, 5], [3, 6]]
add = (el1, el2) -> el1 + el2
zipWith(add, [1, 2, 3], [4, 5, 6]) # => [5, 7, 9]
Обновление : переопределён в стиле Haskell, просто для удовольствия.Не так круто без сопоставления с образцом, ну да ладно ..
zipWith = (func, arr1, arr2) ->
return [] if arr1.length is 0 or arr2.length is 0
el1 = arr1.shift()
el2 = arr2.shift()
ret_arr = zipWith func, arr1, arr2
ret_arr.unshift func(el1, el2)
ret_arr
О, чувак, это было весело.ТАК нужно больше вопросов, как это: D
Суть для zip
и zipWith