-
Notifications
You must be signed in to change notification settings - Fork 1
Lang reduce
reduce(items, callback [, initialValue])
- левоассоциативное объединение
reduceRight(items, callback [, initialValue])
- правоассоциативное объединение
-
items
{(Array|Object)} - набор значений (список или словарь) -
callback
{(Function|Object)} - функция-редуктор (сама функция или[callback, context]
) -
initialValue
{*} - начальное значение -
:return
{*} - результат объединения
Функции совместимы с ES5-фунциями array.reduce и array.reduceRight со следующими расширениями:
- Перебирать можно не только массивы, но и объекты.
- Можно указывать контекст для
callback
. Так, как отдельным аргументомcontext
сделать сложно (непонятно было ли указаноinitialValue
) - пришлось сделать небольшое извращения. Для указания контекста, вместоcallback
следует передать массив [метод, объект]. Например:[instance.method, instance]
.
Сумма всех элементов:
items = [1, 2, 3, 4, 5];
sum = go.Lang.reduce(items, function (prev, current) {return prev + current; });
callback
вызывается (в указанном контексте) для каждого элемента из набора со следующими аргументами:
-
perviousValue
- текущее значение редукции -
currentValue
- значение текущего элемента -
index
- индекс массива или ключ словаря -
items
- исходный набор -
:return
- очередное значение редукции. Используется в качествеperviousValue
на следующем шаге или в качестве результата, если этот шаг последний.
При указании аргумента initialValue
, он становится исходным значением редукции (perviousValue
на первом шаге). И перебор начинается с первого элемента набора.
Если не указан, для perviousValue
берётся первый элемент, а перебор начинается со второго.
При указании в качестве items
объекта, перебираются его собственные элементы (элементы из прототипов не затрагиваются).
Так, как порядок перебора объектов зависит от реализации в браузере, то корректный результат дают только коммутативные операции (сложение, умножение) и им подобные.
Исходя из этого - reduce()
и reduceRight()
не отличаются для словарей.