rubico 2.6.6 → 2.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Transducer.d.ts +1 -1
- package/Transducer.js +65 -16
- package/__.js +10 -1
- package/_internal/mapMapSeries.js +1 -0
- package/_internal/objectMapSeries.js +1 -0
- package/_internal/setMapSeries.js +1 -0
- package/all.d.ts +2 -2
- package/all.js +11 -2
- package/always.js +8 -0
- package/and.js +6 -0
- package/assign.js +9 -0
- package/compose.js +33 -8
- package/curry.js +18 -0
- package/dist/Transducer.es.js +1 -1
- package/dist/Transducer.es.min.js +1 -1
- package/dist/Transducer.js +1 -1
- package/dist/Transducer.min.js +1 -1
- package/dist/Transducer.mjs +1 -1
- package/dist/__.es.js +1 -1
- package/dist/__.es.min.js +1 -1
- package/dist/__.js +1 -1
- package/dist/__.min.js +1 -1
- package/dist/__.mjs +1 -1
- package/dist/all.es.js +1 -1
- package/dist/all.es.min.js +1 -1
- package/dist/all.js +1 -1
- package/dist/all.min.js +1 -1
- package/dist/all.mjs +1 -1
- package/dist/always.es.js +1 -1
- package/dist/always.es.min.js +1 -1
- package/dist/always.js +1 -1
- package/dist/always.min.js +1 -1
- package/dist/always.mjs +1 -1
- package/dist/and.es.js +1 -1
- package/dist/and.es.min.js +1 -1
- package/dist/and.js +1 -1
- package/dist/and.min.js +1 -1
- package/dist/and.mjs +1 -1
- package/dist/assign.es.js +1 -1
- package/dist/assign.es.min.js +1 -1
- package/dist/assign.js +1 -1
- package/dist/assign.min.js +1 -1
- package/dist/assign.mjs +1 -1
- package/dist/compose.es.js +5 -1
- package/dist/compose.es.min.js +2 -2
- package/dist/compose.js +5 -1
- package/dist/compose.min.js +2 -2
- package/dist/compose.mjs +5 -1
- package/dist/curry.es.js +1 -1
- package/dist/curry.es.min.js +1 -1
- package/dist/curry.js +1 -1
- package/dist/curry.min.js +1 -1
- package/dist/curry.mjs +1 -1
- package/dist/eq.es.js +1 -1
- package/dist/eq.es.min.js +1 -1
- package/dist/eq.js +1 -1
- package/dist/eq.min.js +1 -1
- package/dist/eq.mjs +1 -1
- package/dist/every.es.js +1 -1
- package/dist/every.es.min.js +1 -1
- package/dist/every.js +1 -1
- package/dist/every.min.js +1 -1
- package/dist/every.mjs +1 -1
- package/dist/filter.es.js +1 -1
- package/dist/filter.es.min.js +1 -1
- package/dist/filter.js +1 -1
- package/dist/filter.min.js +1 -1
- package/dist/filter.mjs +1 -1
- package/dist/flatMap.es.js +1 -1
- package/dist/flatMap.es.min.js +1 -1
- package/dist/flatMap.js +1 -1
- package/dist/flatMap.min.js +1 -1
- package/dist/flatMap.mjs +1 -1
- package/dist/forEach.es.js +1 -1
- package/dist/forEach.es.min.js +1 -1
- package/dist/forEach.js +1 -1
- package/dist/forEach.min.js +1 -1
- package/dist/forEach.mjs +1 -1
- package/dist/get.es.js +1 -1
- package/dist/get.es.min.js +1 -1
- package/dist/get.js +1 -1
- package/dist/get.min.js +1 -1
- package/dist/get.mjs +1 -1
- package/dist/gt.es.js +1 -1
- package/dist/gt.es.min.js +1 -1
- package/dist/gt.js +1 -1
- package/dist/gt.min.js +1 -1
- package/dist/gt.mjs +1 -1
- package/dist/gte.es.js +1 -1
- package/dist/gte.es.min.js +1 -1
- package/dist/gte.js +1 -1
- package/dist/gte.min.js +1 -1
- package/dist/gte.mjs +1 -1
- package/dist/lt.es.js +1 -1
- package/dist/lt.es.min.js +1 -1
- package/dist/lt.js +1 -1
- package/dist/lt.min.js +1 -1
- package/dist/lt.mjs +1 -1
- package/dist/lte.es.js +1 -1
- package/dist/lte.es.min.js +1 -1
- package/dist/lte.js +1 -1
- package/dist/lte.min.js +1 -1
- package/dist/lte.mjs +1 -1
- package/dist/map.es.js +1 -1
- package/dist/map.es.min.js +1 -1
- package/dist/map.js +1 -1
- package/dist/map.min.js +1 -1
- package/dist/map.mjs +1 -1
- package/dist/not.es.js +1 -1
- package/dist/not.es.min.js +1 -1
- package/dist/not.js +1 -1
- package/dist/not.min.js +1 -1
- package/dist/not.mjs +1 -1
- package/dist/omit.es.js +1 -1
- package/dist/omit.es.min.js +1 -1
- package/dist/omit.js +1 -1
- package/dist/omit.min.js +1 -1
- package/dist/omit.mjs +1 -1
- package/dist/or.es.js +1 -1
- package/dist/or.es.min.js +1 -1
- package/dist/or.js +1 -1
- package/dist/or.min.js +1 -1
- package/dist/or.mjs +1 -1
- package/dist/pick.es.js +1 -1
- package/dist/pick.es.min.js +1 -1
- package/dist/pick.js +1 -1
- package/dist/pick.min.js +1 -1
- package/dist/pick.mjs +1 -1
- package/dist/pipe.es.js +5 -1
- package/dist/pipe.es.min.js +2 -2
- package/dist/pipe.js +5 -1
- package/dist/pipe.min.js +2 -2
- package/dist/pipe.mjs +5 -1
- package/dist/reduce.es.js +8 -8
- package/dist/reduce.es.min.js +1 -1
- package/dist/reduce.js +8 -8
- package/dist/reduce.min.js +1 -1
- package/dist/reduce.mjs +8 -8
- package/dist/rubico.es.js +23 -11
- package/dist/rubico.es.min.js +2 -2
- package/dist/rubico.global.js +23 -11
- package/dist/rubico.global.min.js +2 -2
- package/dist/rubico.js +23 -11
- package/dist/rubico.min.js +2 -2
- package/dist/rubico.mjs +23 -11
- package/dist/set.es.js +1 -1
- package/dist/set.es.min.js +1 -1
- package/dist/set.js +1 -1
- package/dist/set.min.js +1 -1
- package/dist/set.mjs +1 -1
- package/dist/some.es.js +1 -1
- package/dist/some.es.min.js +1 -1
- package/dist/some.js +1 -1
- package/dist/some.min.js +1 -1
- package/dist/some.mjs +1 -1
- package/dist/switchCase.es.js +1 -1
- package/dist/switchCase.es.min.js +1 -1
- package/dist/switchCase.js +1 -1
- package/dist/switchCase.min.js +1 -1
- package/dist/switchCase.mjs +1 -1
- package/dist/tap.es.js +1 -1
- package/dist/tap.es.min.js +1 -1
- package/dist/tap.js +1 -1
- package/dist/tap.min.js +1 -1
- package/dist/tap.mjs +1 -1
- package/dist/thunkify.es.js +8 -4
- package/dist/thunkify.es.min.js +2 -2
- package/dist/thunkify.js +8 -4
- package/dist/thunkify.min.js +2 -2
- package/dist/thunkify.mjs +8 -4
- package/dist/transform.es.js +1 -1
- package/dist/transform.es.min.js +1 -1
- package/dist/transform.js +1 -1
- package/dist/transform.min.js +1 -1
- package/dist/transform.mjs +1 -1
- package/dist/tryCatch.es.js +1 -1
- package/dist/tryCatch.es.min.js +1 -1
- package/dist/tryCatch.js +1 -1
- package/dist/tryCatch.min.js +1 -1
- package/dist/tryCatch.mjs +1 -1
- package/dist/x/append.es.js +1 -1
- package/dist/x/append.es.min.js +1 -1
- package/dist/x/append.js +1 -1
- package/dist/x/append.min.js +1 -1
- package/dist/x/append.mjs +1 -1
- package/dist/x/callProp.es.js +1 -1
- package/dist/x/callProp.es.min.js +1 -1
- package/dist/x/callProp.js +1 -1
- package/dist/x/callProp.min.js +1 -1
- package/dist/x/callProp.mjs +1 -1
- package/dist/x/defaultsDeep.es.js +1 -1
- package/dist/x/defaultsDeep.es.min.js +1 -1
- package/dist/x/defaultsDeep.js +1 -1
- package/dist/x/defaultsDeep.min.js +1 -1
- package/dist/x/defaultsDeep.mjs +1 -1
- package/dist/x/differenceWith.es.js +1 -1
- package/dist/x/differenceWith.es.min.js +1 -1
- package/dist/x/differenceWith.js +1 -1
- package/dist/x/differenceWith.min.js +1 -1
- package/dist/x/differenceWith.mjs +1 -1
- package/dist/x/filterOut.es.js +1 -1
- package/dist/x/filterOut.es.min.js +1 -1
- package/dist/x/filterOut.js +1 -1
- package/dist/x/filterOut.min.js +1 -1
- package/dist/x/filterOut.mjs +1 -1
- package/dist/x/find.es.js +1 -1
- package/dist/x/find.es.min.js +1 -1
- package/dist/x/find.js +1 -1
- package/dist/x/find.min.js +1 -1
- package/dist/x/find.mjs +1 -1
- package/dist/x/findIndex.es.js +1 -1
- package/dist/x/findIndex.es.min.js +1 -1
- package/dist/x/findIndex.js +1 -1
- package/dist/x/findIndex.min.js +1 -1
- package/dist/x/findIndex.mjs +1 -1
- package/dist/x/first.es.js +1 -1
- package/dist/x/first.es.min.js +1 -1
- package/dist/x/first.js +1 -1
- package/dist/x/first.min.js +1 -1
- package/dist/x/first.mjs +1 -1
- package/dist/x/flatten.es.js +1 -1
- package/dist/x/flatten.es.min.js +1 -1
- package/dist/x/flatten.js +1 -1
- package/dist/x/flatten.min.js +1 -1
- package/dist/x/flatten.mjs +1 -1
- package/dist/x/groupBy.es.js +8 -8
- package/dist/x/groupBy.es.min.js +1 -1
- package/dist/x/groupBy.js +8 -8
- package/dist/x/groupBy.min.js +1 -1
- package/dist/x/groupBy.mjs +8 -8
- package/dist/x/has.es.js +1 -1
- package/dist/x/has.es.min.js +1 -1
- package/dist/x/has.js +1 -1
- package/dist/x/has.min.js +1 -1
- package/dist/x/has.mjs +1 -1
- package/dist/x/identity.es.js +1 -1
- package/dist/x/identity.es.min.js +1 -1
- package/dist/x/identity.js +1 -1
- package/dist/x/identity.min.js +1 -1
- package/dist/x/identity.mjs +1 -1
- package/dist/x/includes.es.js +1 -1
- package/dist/x/includes.es.min.js +1 -1
- package/dist/x/includes.js +1 -1
- package/dist/x/includes.min.js +1 -1
- package/dist/x/includes.mjs +1 -1
- package/dist/x/isDeepEqual.es.js +1 -1
- package/dist/x/isDeepEqual.es.min.js +1 -1
- package/dist/x/isDeepEqual.js +1 -1
- package/dist/x/isDeepEqual.min.js +1 -1
- package/dist/x/isDeepEqual.mjs +1 -1
- package/dist/x/isEmpty.es.js +1 -1
- package/dist/x/isEmpty.es.min.js +1 -1
- package/dist/x/isEmpty.js +1 -1
- package/dist/x/isEmpty.min.js +1 -1
- package/dist/x/isEmpty.mjs +1 -1
- package/dist/x/isEqual.es.js +1 -1
- package/dist/x/isEqual.es.min.js +1 -1
- package/dist/x/isEqual.js +1 -1
- package/dist/x/isEqual.min.js +1 -1
- package/dist/x/isEqual.mjs +1 -1
- package/dist/x/isFunction.es.js +1 -1
- package/dist/x/isFunction.es.min.js +1 -1
- package/dist/x/isFunction.js +1 -1
- package/dist/x/isFunction.min.js +1 -1
- package/dist/x/isFunction.mjs +1 -1
- package/dist/x/isIn.es.js +1 -1
- package/dist/x/isIn.es.min.js +1 -1
- package/dist/x/isIn.js +1 -1
- package/dist/x/isIn.min.js +1 -1
- package/dist/x/isIn.mjs +1 -1
- package/dist/x/isObject.es.js +1 -1
- package/dist/x/isObject.es.min.js +1 -1
- package/dist/x/isObject.js +1 -1
- package/dist/x/isObject.min.js +1 -1
- package/dist/x/isObject.mjs +1 -1
- package/dist/x/isString.es.js +1 -1
- package/dist/x/isString.es.min.js +1 -1
- package/dist/x/isString.js +1 -1
- package/dist/x/isString.min.js +1 -1
- package/dist/x/isString.mjs +1 -1
- package/dist/x/keys.es.js +1 -1
- package/dist/x/keys.es.min.js +1 -1
- package/dist/x/keys.js +1 -1
- package/dist/x/keys.min.js +1 -1
- package/dist/x/keys.mjs +1 -1
- package/dist/x/last.es.js +1 -1
- package/dist/x/last.es.min.js +1 -1
- package/dist/x/last.js +1 -1
- package/dist/x/last.min.js +1 -1
- package/dist/x/last.mjs +1 -1
- package/dist/x/maxBy.es.js +1 -1
- package/dist/x/maxBy.es.min.js +1 -1
- package/dist/x/maxBy.js +1 -1
- package/dist/x/maxBy.min.js +1 -1
- package/dist/x/maxBy.mjs +1 -1
- package/dist/x/noop.es.js +1 -1
- package/dist/x/noop.es.min.js +1 -1
- package/dist/x/noop.js +1 -1
- package/dist/x/noop.min.js +1 -1
- package/dist/x/noop.mjs +1 -1
- package/dist/x/pluck.es.js +1 -1
- package/dist/x/pluck.es.min.js +1 -1
- package/dist/x/pluck.js +1 -1
- package/dist/x/pluck.min.js +1 -1
- package/dist/x/pluck.mjs +1 -1
- package/dist/x/prepend.es.js +1 -1
- package/dist/x/prepend.es.min.js +1 -1
- package/dist/x/prepend.js +1 -1
- package/dist/x/prepend.min.js +1 -1
- package/dist/x/prepend.mjs +1 -1
- package/dist/x/size.es.js +1 -1
- package/dist/x/size.es.min.js +1 -1
- package/dist/x/size.js +1 -1
- package/dist/x/size.min.js +1 -1
- package/dist/x/size.mjs +1 -1
- package/dist/x/trace.es.js +1 -1
- package/dist/x/trace.es.min.js +1 -1
- package/dist/x/trace.js +1 -1
- package/dist/x/trace.min.js +1 -1
- package/dist/x/trace.mjs +1 -1
- package/dist/x/unionWith.es.js +1 -1
- package/dist/x/unionWith.es.min.js +1 -1
- package/dist/x/unionWith.js +1 -1
- package/dist/x/unionWith.min.js +1 -1
- package/dist/x/unionWith.mjs +1 -1
- package/dist/x/uniq.es.js +1 -1
- package/dist/x/uniq.es.min.js +1 -1
- package/dist/x/uniq.js +1 -1
- package/dist/x/uniq.min.js +1 -1
- package/dist/x/uniq.mjs +1 -1
- package/dist/x/unless.es.js +1 -1
- package/dist/x/unless.es.min.js +1 -1
- package/dist/x/unless.js +1 -1
- package/dist/x/unless.min.js +1 -1
- package/dist/x/unless.mjs +1 -1
- package/dist/x/values.es.js +1 -1
- package/dist/x/values.es.min.js +1 -1
- package/dist/x/values.js +1 -1
- package/dist/x/values.min.js +1 -1
- package/dist/x/values.mjs +1 -1
- package/dist/x/when.es.js +1 -1
- package/dist/x/when.es.min.js +1 -1
- package/dist/x/when.js +1 -1
- package/dist/x/when.min.js +1 -1
- package/dist/x/when.mjs +1 -1
- package/eq.d.ts +6 -6
- package/eq.js +14 -6
- package/es.js +23 -11
- package/every.js +19 -5
- package/filter.js +59 -15
- package/flatMap.js +32 -23
- package/forEach.js +107 -13
- package/get.js +9 -0
- package/gt.js +9 -0
- package/gte.js +9 -0
- package/index.js +23 -11
- package/lte.js +9 -0
- package/map.js +153 -36
- package/not.js +7 -0
- package/omit.d.ts +2 -2
- package/omit.js +11 -2
- package/or.js +6 -0
- package/package.json +1 -1
- package/pick.js +9 -0
- package/pipe.js +30 -3
- package/reduce.js +111 -30
- package/set.js +9 -0
- package/some.js +17 -3
- package/switchCase.js +6 -0
- package/tap.js +18 -0
- package/thunkify.js +30 -5
- package/transform.js +105 -29
- package/tryCatch.js +5 -0
- package/x/append.js +3 -0
- package/x/callProp.js +5 -0
- package/x/defaultsDeep.d.ts +2 -2
- package/x/defaultsDeep.js +7 -2
- package/x/differenceWith.js +5 -0
- package/x/find.d.ts +2 -2
- package/x/find.js +2 -2
- package/x/groupBy.d.ts +2 -2
- package/x/groupBy.js +2 -2
- package/x/pluck.d.ts +2 -2
- package/x/pluck.js +2 -2
- package/x/unionWith.test.js +3 -3
package/map.js
CHANGED
|
@@ -93,37 +93,73 @@ const _map = function (value, f) {
|
|
|
93
93
|
*
|
|
94
94
|
* @synopsis
|
|
95
95
|
* ```coffeescript [specscript]
|
|
96
|
-
* type Functor = Array|
|
|
96
|
+
* type Functor = Array|Set|Map|Generator|AsyncGenerator|{ map: function }|Object
|
|
97
97
|
*
|
|
98
98
|
* type Mapper = (
|
|
99
99
|
* item any,
|
|
100
100
|
* indexOrKey number|string|any,
|
|
101
|
-
*
|
|
101
|
+
* ftor Functor
|
|
102
102
|
* )=>(resultItem Promise|any)
|
|
103
103
|
*
|
|
104
|
-
* map(
|
|
105
|
-
* map(mapper Mapper)(
|
|
104
|
+
* map(ftor Promise|Functor, mapper Mapper) -> result Promise|Functor
|
|
105
|
+
* map(mapper Mapper)(ftor Functor) -> result Promise|Functor
|
|
106
106
|
* ```
|
|
107
107
|
*
|
|
108
108
|
* @description
|
|
109
|
-
* Applies a mapper function to each item of a functor, returning a functor of the same type with the
|
|
109
|
+
* Applies a mapper function to each item of a functor, returning a functor of the same type with the mapped items. The order of the items is maintained.
|
|
110
110
|
*
|
|
111
|
-
* The following data types are considered functors:
|
|
111
|
+
* The following data types are considered to be functors:
|
|
112
112
|
* * `array`
|
|
113
|
-
* * `object`
|
|
114
113
|
* * `set`
|
|
115
|
-
* * `
|
|
116
|
-
* * `
|
|
114
|
+
* * `map`
|
|
115
|
+
* * `generator`
|
|
116
|
+
* * `async generator`
|
|
117
|
+
* * `object with .map method`
|
|
118
|
+
* * `object`
|
|
117
119
|
*
|
|
118
|
-
* The mapper function defines
|
|
120
|
+
* The mapper function defines a mapping between a given item in the functor to a resulting item in the returned functor.
|
|
119
121
|
*
|
|
120
122
|
* ```javascript
|
|
121
123
|
* const mapper = function (item) {
|
|
122
|
-
* // resultItem is the result of
|
|
124
|
+
* // resultItem is the result of a mapping from item
|
|
123
125
|
* return resultItem
|
|
124
126
|
* }
|
|
125
127
|
* ```
|
|
126
128
|
*
|
|
129
|
+
* The mapper function signature changes depending on the provided functor.
|
|
130
|
+
*
|
|
131
|
+
* If the functor is an array:
|
|
132
|
+
* ```coffeescript [specscript]
|
|
133
|
+
* mapper(item any, index number, ftor Array) -> resultItem Promise|any
|
|
134
|
+
* ```
|
|
135
|
+
*
|
|
136
|
+
* If the functor is a set:
|
|
137
|
+
* ```coffeescript [specscript]
|
|
138
|
+
* mapper(item any, item any, ftor Set) -> resultItem Promise|any
|
|
139
|
+
* ```
|
|
140
|
+
*
|
|
141
|
+
* If the functor is a map:
|
|
142
|
+
* ```coffeescript [specscript]
|
|
143
|
+
* mapper(item any, key any, ftor Map) -> resultItem Promise|any
|
|
144
|
+
* ```
|
|
145
|
+
*
|
|
146
|
+
* If the functor is a generator:
|
|
147
|
+
* ```coffeescript [specscript]
|
|
148
|
+
* mapper(item any) -> resultItem Promise|any
|
|
149
|
+
* ```
|
|
150
|
+
*
|
|
151
|
+
* If the functor is an async generator:
|
|
152
|
+
* ```coffeescript [specscript]
|
|
153
|
+
* mapper(item any) -> resultItem Promise|any
|
|
154
|
+
* ```
|
|
155
|
+
*
|
|
156
|
+
* If the functor is an object with a `.map` method, the mapper function signature is defined externally.
|
|
157
|
+
*
|
|
158
|
+
* If the functor is a plain object:
|
|
159
|
+
* ```coffeescript [specscript]
|
|
160
|
+
* mapper(item any, key string, ftor Object) -> resultItem Promise|any
|
|
161
|
+
* ```
|
|
162
|
+
*
|
|
127
163
|
* `map` works for arrays.
|
|
128
164
|
*
|
|
129
165
|
* ```javascript [playground]
|
|
@@ -146,7 +182,7 @@ const _map = function (value, f) {
|
|
|
146
182
|
* promise.then(console.log) // [1, 4, 9, 16, 25]
|
|
147
183
|
* ```
|
|
148
184
|
*
|
|
149
|
-
*
|
|
185
|
+
* `map` applies the mapper function to just the values of an object.
|
|
150
186
|
*
|
|
151
187
|
* ```javascript [playground]
|
|
152
188
|
* const square = number => number ** 2
|
|
@@ -157,7 +193,7 @@ const _map = function (value, f) {
|
|
|
157
193
|
* console.log(result) // { a: 1, b: 4, c: 9, d: 16, e: 25 }
|
|
158
194
|
* ```
|
|
159
195
|
*
|
|
160
|
-
*
|
|
196
|
+
* `map` applies the mapper function to the values of the entries of a map.
|
|
161
197
|
*
|
|
162
198
|
* ```javascript [playground]
|
|
163
199
|
* const square = number => number ** 2
|
|
@@ -168,7 +204,7 @@ const _map = function (value, f) {
|
|
|
168
204
|
* console.log(result) // Map { 'a' => 1, 'b' => 4, 'c' => 9, 'd' => 16, 'e' => 25 }
|
|
169
205
|
* ```
|
|
170
206
|
*
|
|
171
|
-
*
|
|
207
|
+
* `map` applies the mapper function lazily to each value of a generator, creating a new generator with mapped items.
|
|
172
208
|
*
|
|
173
209
|
* ```javascript [playground]
|
|
174
210
|
* const capitalize = string => string.toUpperCase()
|
|
@@ -185,7 +221,7 @@ const _map = function (value, f) {
|
|
|
185
221
|
* console.log([...ABCGenerator]) // ['A', 'B', 'C']
|
|
186
222
|
* ```
|
|
187
223
|
*
|
|
188
|
-
*
|
|
224
|
+
* `map` applies the mapper function lazily to each value of an async generator, creating a new async generator with mapped items.
|
|
189
225
|
*
|
|
190
226
|
* ```javascript [playground]
|
|
191
227
|
* const capitalize = string => string.toUpperCase()
|
|
@@ -223,6 +259,17 @@ const _map = function (value, f) {
|
|
|
223
259
|
* // [1, 4, 9, 16, 25]
|
|
224
260
|
* ```
|
|
225
261
|
*
|
|
262
|
+
* See also:
|
|
263
|
+
* * [forEach](/docs/forEach)
|
|
264
|
+
* * [map.entries](/docs/map.entries)
|
|
265
|
+
* * [map.series](/docs/map.series)
|
|
266
|
+
* * [map.pool](/docs/map.pool)
|
|
267
|
+
* * [filter](/docs/filter)
|
|
268
|
+
* * [reduce](/docs/reduce)
|
|
269
|
+
* * [transform](/docs/transform)
|
|
270
|
+
* * [flatMap](/docs/flatMap)
|
|
271
|
+
* * [some](/docs/some)
|
|
272
|
+
*
|
|
226
273
|
* @execution concurrent
|
|
227
274
|
*
|
|
228
275
|
* @TODO streamMap
|
|
@@ -255,23 +302,49 @@ const _mapEntries = (value, f) => {
|
|
|
255
302
|
*
|
|
256
303
|
* @synopsis
|
|
257
304
|
* ```coffeescript [specscript]
|
|
258
|
-
* type
|
|
305
|
+
* type FunctorWithEntries = Map|Object
|
|
259
306
|
*
|
|
260
|
-
* type
|
|
261
|
-
* value any,
|
|
262
|
-
*
|
|
263
|
-
* collection EntriesMappable
|
|
264
|
-
* )=>(resultItem Promise|any)
|
|
307
|
+
* type EntryMapper = (
|
|
308
|
+
* entry [key string|any, value any],
|
|
309
|
+
* )=>(resultEntry Promise|[resultKey string|any, resultItem any])
|
|
265
310
|
*
|
|
266
|
-
* map.entries(
|
|
267
|
-
*
|
|
311
|
+
* map.entries(
|
|
312
|
+
* value Promise|FunctorWithEntries,
|
|
313
|
+
* mapper EntryMapper
|
|
314
|
+
* ) -> Promise|FunctorWithEntries
|
|
268
315
|
*
|
|
269
|
-
* map.entries(
|
|
270
|
-
* -> Promise|
|
|
316
|
+
* map.entries(mapper EntryMapper)(value FunctorWithEntries)
|
|
317
|
+
* -> Promise|FunctorWithEntries
|
|
271
318
|
* ```
|
|
272
319
|
*
|
|
273
320
|
* @description
|
|
274
|
-
* `map` over the entries
|
|
321
|
+
* `map` over the entries of a functor as opposed to the values.
|
|
322
|
+
*
|
|
323
|
+
* The following data types are considered to be functors with entries:
|
|
324
|
+
* * `map`
|
|
325
|
+
* * `object`
|
|
326
|
+
*
|
|
327
|
+
* The signature of the mapper function changes depending on the provided functor:
|
|
328
|
+
*
|
|
329
|
+
* If the functor is a map:
|
|
330
|
+
*
|
|
331
|
+
* ```coffeescript [specscript]
|
|
332
|
+
* mapper(entry [key any, value any]) -> resultEntry Promise|[
|
|
333
|
+
* resultKey any,
|
|
334
|
+
* resultValue any,
|
|
335
|
+
* ]
|
|
336
|
+
* ```
|
|
337
|
+
*
|
|
338
|
+
* If the functor is an object:
|
|
339
|
+
*
|
|
340
|
+
* ```coffeescript [specscript]
|
|
341
|
+
* mapper(entry [key string, value any]) -> resultEntry Promise|[
|
|
342
|
+
* resultKey string,
|
|
343
|
+
* resultValue any,
|
|
344
|
+
* ]
|
|
345
|
+
* ```
|
|
346
|
+
*
|
|
347
|
+
* `map.entries` works for objects and maps.
|
|
275
348
|
*
|
|
276
349
|
* ```javascript [playground]
|
|
277
350
|
* const upperCaseKeysAndSquareValues =
|
|
@@ -296,6 +369,17 @@ const _mapEntries = (value, f) => {
|
|
|
296
369
|
* // { a: 1, b: 4, c: 9 }
|
|
297
370
|
* ```
|
|
298
371
|
*
|
|
372
|
+
* See also:
|
|
373
|
+
* * [forEach](/docs/forEach)
|
|
374
|
+
* * [map](/docs/map)
|
|
375
|
+
* * [map.series](/docs/map.series)
|
|
376
|
+
* * [map.pool](/docs/map.pool)
|
|
377
|
+
* * [filter](/docs/filter)
|
|
378
|
+
* * [reduce](/docs/reduce)
|
|
379
|
+
* * [transform](/docs/transform)
|
|
380
|
+
* * [flatMap](/docs/flatMap)
|
|
381
|
+
* * [some](/docs/some)
|
|
382
|
+
*
|
|
299
383
|
* @since v1.7.0
|
|
300
384
|
*/
|
|
301
385
|
map.entries = function mapEntries(arg0, arg1) {
|
|
@@ -351,16 +435,21 @@ const _mapSeries = function (collection, f) {
|
|
|
351
435
|
*
|
|
352
436
|
* @synopsis
|
|
353
437
|
* ```coffeescript [specscript]
|
|
354
|
-
* type
|
|
438
|
+
* type MapSeriesFunctor = Array|Object|Set|Map
|
|
355
439
|
*
|
|
356
440
|
* type Mapper = (
|
|
357
441
|
* value any,
|
|
358
442
|
* indexOrKey number|string|any,
|
|
359
|
-
*
|
|
443
|
+
* ftor MapSeriesFunctor,
|
|
360
444
|
* )=>(mappedItem Promise|any)
|
|
361
445
|
*
|
|
362
|
-
* map.series(
|
|
363
|
-
*
|
|
446
|
+
* map.series(
|
|
447
|
+
* ftor Promise|MapSeriesFunctor,
|
|
448
|
+
* mapper Mapper
|
|
449
|
+
* ) -> result MapSeriesFunctor
|
|
450
|
+
*
|
|
451
|
+
* map.series(mapper Mapper)(ftor MapSeriesFunctor)
|
|
452
|
+
* -> result MapSeriesFunctor
|
|
364
453
|
* ```
|
|
365
454
|
*
|
|
366
455
|
* @description
|
|
@@ -387,6 +476,17 @@ const _mapSeries = function (collection, f) {
|
|
|
387
476
|
* // [1, 4, 9, 16, 25]
|
|
388
477
|
* ```
|
|
389
478
|
*
|
|
479
|
+
* See also:
|
|
480
|
+
* * [forEach](/docs/forEach)
|
|
481
|
+
* * [map](/docs/map)
|
|
482
|
+
* * [map.entries](/docs/map.entries)
|
|
483
|
+
* * [map.pool](/docs/map.pool)
|
|
484
|
+
* * [filter](/docs/filter)
|
|
485
|
+
* * [reduce](/docs/reduce)
|
|
486
|
+
* * [transform](/docs/transform)
|
|
487
|
+
* * [flatMap](/docs/flatMap)
|
|
488
|
+
* * [some](/docs/some)
|
|
489
|
+
*
|
|
390
490
|
* @execution series
|
|
391
491
|
*/
|
|
392
492
|
map.series = function mapSeries(arg0, arg1) {
|
|
@@ -435,18 +535,24 @@ const _mapPool = function (f, concurrency, mapper) {
|
|
|
435
535
|
*
|
|
436
536
|
* @synopsis
|
|
437
537
|
* ```coffeescript [specscript]
|
|
438
|
-
* type
|
|
538
|
+
* type MapPoolFunctor = Array|Object|Set|Map
|
|
539
|
+
*
|
|
540
|
+
* type Mapper = (
|
|
541
|
+
* item any,
|
|
542
|
+
* indexOrKey number|string|any,
|
|
543
|
+
* ftor Functor
|
|
544
|
+
* )=>(resultItem Promise|any)
|
|
439
545
|
*
|
|
440
546
|
* map.pool(
|
|
547
|
+
* ftor MapPoolFunctor,
|
|
441
548
|
* concurrency number,
|
|
442
|
-
* mapper
|
|
443
|
-
* )
|
|
549
|
+
* mapper Mapper
|
|
550
|
+
* ) -> result Promise|Array
|
|
444
551
|
*
|
|
445
552
|
* map.pool(
|
|
446
|
-
* f Functor,
|
|
447
553
|
* concurrency number,
|
|
448
|
-
* mapper
|
|
449
|
-
* ) -> result Promise|Array
|
|
554
|
+
* mapper Mapper
|
|
555
|
+
* )(ftor MapPoolFunctor) -> result Promise|Array
|
|
450
556
|
* ```
|
|
451
557
|
*
|
|
452
558
|
* @description
|
|
@@ -477,6 +583,17 @@ const _mapPool = function (f, concurrency, mapper) {
|
|
|
477
583
|
* // [1, 4, 9, 16, 25]
|
|
478
584
|
* ```
|
|
479
585
|
*
|
|
586
|
+
* See also:
|
|
587
|
+
* * [forEach](/docs/forEach)
|
|
588
|
+
* * [map](/docs/map)
|
|
589
|
+
* * [map.entries](/docs/map.entries)
|
|
590
|
+
* * [map.series](/docs/map.series)
|
|
591
|
+
* * [filter](/docs/filter)
|
|
592
|
+
* * [reduce](/docs/reduce)
|
|
593
|
+
* * [transform](/docs/transform)
|
|
594
|
+
* * [flatMap](/docs/flatMap)
|
|
595
|
+
* * [some](/docs/some)
|
|
596
|
+
*
|
|
480
597
|
* @TODO objectMapPool
|
|
481
598
|
*
|
|
482
599
|
* @execution concurrent
|
package/not.js
CHANGED
|
@@ -53,6 +53,13 @@ const _not = function (args, predicate) {
|
|
|
53
53
|
*
|
|
54
54
|
* not(Promise.resolve(3), isOdd).then(console.log) // false
|
|
55
55
|
* ```
|
|
56
|
+
*
|
|
57
|
+
* See also:
|
|
58
|
+
* * [some](/docs/some)
|
|
59
|
+
* * [and](/docs/and)
|
|
60
|
+
* * [or](/docs/or)
|
|
61
|
+
* * [eq](/docs/eq)
|
|
62
|
+
*
|
|
56
63
|
*/
|
|
57
64
|
|
|
58
65
|
const not = function (...args) {
|
package/omit.d.ts
CHANGED
|
@@ -14,8 +14,8 @@ export = omit;
|
|
|
14
14
|
*
|
|
15
15
|
* ```javascript [playground]
|
|
16
16
|
* console.log(
|
|
17
|
-
* omit({ _id: '1', name: '
|
|
18
|
-
* ) // { name: '
|
|
17
|
+
* omit({ _id: '1', name: 'John' }, ['_id']),
|
|
18
|
+
* ) // { name: 'John' }
|
|
19
19
|
* ```
|
|
20
20
|
*
|
|
21
21
|
* `omit` supports three types of path patterns for nested property access
|
package/omit.js
CHANGED
|
@@ -30,8 +30,8 @@ const _omit = function (source, paths) {
|
|
|
30
30
|
*
|
|
31
31
|
* ```javascript [playground]
|
|
32
32
|
* console.log(
|
|
33
|
-
* omit({ _id: '1', name: '
|
|
34
|
-
* ) // { name: '
|
|
33
|
+
* omit({ _id: '1', name: 'John' }, ['_id']),
|
|
34
|
+
* ) // { name: 'John' }
|
|
35
35
|
* ```
|
|
36
36
|
*
|
|
37
37
|
* `omit` supports three types of path patterns for nested property access
|
|
@@ -69,6 +69,15 @@ const _omit = function (source, paths) {
|
|
|
69
69
|
* omit(Promise.resolve({ a: 1, b: 2, c: 3 }), ['a', 'b']).then(console.log)
|
|
70
70
|
* // { c: 3 }
|
|
71
71
|
* ```
|
|
72
|
+
*
|
|
73
|
+
* See also:
|
|
74
|
+
* * [pipe](/docs/pipe)
|
|
75
|
+
* * [all](/docs/all)
|
|
76
|
+
* * [assign](/docs/assign)
|
|
77
|
+
* * [get](/docs/get)
|
|
78
|
+
* * [set](/docs/set)
|
|
79
|
+
* * [pick](/docs/pick)
|
|
80
|
+
* * [forEach](/docs/forEach)
|
|
72
81
|
*/
|
|
73
82
|
const omit = function (arg0, arg1) {
|
|
74
83
|
if (arg1 == null) {
|
package/or.js
CHANGED
|
@@ -138,6 +138,12 @@ const areAnyPredicatesTruthy = function (args, predicates) {
|
|
|
138
138
|
* ]).then(console.log) // true
|
|
139
139
|
* ```
|
|
140
140
|
*
|
|
141
|
+
* See also:
|
|
142
|
+
* * [some](/docs/some)
|
|
143
|
+
* * [and](/docs/and)
|
|
144
|
+
* * [not](/docs/not)
|
|
145
|
+
* * [eq](/docs/eq)
|
|
146
|
+
*
|
|
141
147
|
* @execution series
|
|
142
148
|
*
|
|
143
149
|
* @note ...args slows down here by an order of magnitude
|
package/package.json
CHANGED
package/pick.js
CHANGED
|
@@ -69,6 +69,15 @@ const _pick = function (source, keys) {
|
|
|
69
69
|
* pick(Promise.resolve({ a: 1, b: 2, c: 3 }), ['a', 'b']).then(console.log)
|
|
70
70
|
* // { a: 1, b: 2 }
|
|
71
71
|
* ```
|
|
72
|
+
*
|
|
73
|
+
* See also:
|
|
74
|
+
* * [pipe](/docs/pipe)
|
|
75
|
+
* * [all](/docs/all)
|
|
76
|
+
* * [assign](/docs/assign)
|
|
77
|
+
* * [get](/docs/get)
|
|
78
|
+
* * [set](/docs/set)
|
|
79
|
+
* * [omit](/docs/omit)
|
|
80
|
+
* * [forEach](/docs/forEach)
|
|
72
81
|
*/
|
|
73
82
|
const pick = function (arg0, arg1) {
|
|
74
83
|
if (arg1 == null) {
|
package/pipe.js
CHANGED
|
@@ -10,13 +10,19 @@ const __ = require('./_internal/placeholder')
|
|
|
10
10
|
*
|
|
11
11
|
* @synopsis
|
|
12
12
|
* ```coffeescript [specscript]
|
|
13
|
-
*
|
|
13
|
+
* funcs Array<function>
|
|
14
|
+
* args Array<any>
|
|
15
|
+
* argsWithPromises Array<Promise|any>
|
|
14
16
|
*
|
|
15
|
-
* pipe(...args
|
|
17
|
+
* pipe(funcs)(...args) -> result Promise|any
|
|
18
|
+
*
|
|
19
|
+
* pipe(...argsWithPromises, funcs Array<function>) -> result Promise|any
|
|
20
|
+
*
|
|
21
|
+
* pipe(...funcs)(...args) -> result Promise|any
|
|
16
22
|
* ```
|
|
17
23
|
*
|
|
18
24
|
* @description
|
|
19
|
-
* Creates a function pipeline from
|
|
25
|
+
* Creates a function pipeline from multiple functions. Each function in the pipeline is evaluated in series, passing its return value as an argument to the next function. The result of a pipeline execution is the return value of the last function in the pipeline. If any function in the pipeline is asynchronous, the result of the pipeline execution is a Promise.
|
|
20
26
|
*
|
|
21
27
|
* ```javascript [playground]
|
|
22
28
|
* const syncAdd123 = pipe([
|
|
@@ -36,6 +42,17 @@ const __ = require('./_internal/placeholder')
|
|
|
36
42
|
* asyncAdd123(5).then(console.log) // 11
|
|
37
43
|
* ```
|
|
38
44
|
*
|
|
45
|
+
* `pipe` supports a mathematical API.
|
|
46
|
+
*
|
|
47
|
+
* ```javascript [playground]
|
|
48
|
+
* const appendB = x => x + 'b'
|
|
49
|
+
* const appendC = x => x + 'c'
|
|
50
|
+
*
|
|
51
|
+
* const appendBC = pipe(appendB, appendC)
|
|
52
|
+
*
|
|
53
|
+
* console.log(appendBC('a')) // 'abc'
|
|
54
|
+
* ```
|
|
55
|
+
*
|
|
39
56
|
* When passed any amount of arguments before the array of functions, `pipe` executes eagerly; the array of functions is immediately invoked with the supplied arguments.
|
|
40
57
|
*
|
|
41
58
|
* ```javascript [playground]
|
|
@@ -54,6 +71,12 @@ const __ = require('./_internal/placeholder')
|
|
|
54
71
|
* ])
|
|
55
72
|
* ```
|
|
56
73
|
*
|
|
74
|
+
* See also:
|
|
75
|
+
* * [compose](/docs/compose)
|
|
76
|
+
* * [tap](/docs/tap)
|
|
77
|
+
* * [switchCase](/docs/switchCase)
|
|
78
|
+
* * [tryCatch](/docs/tryCatch)
|
|
79
|
+
*
|
|
57
80
|
* @execution series
|
|
58
81
|
*
|
|
59
82
|
* @transducing
|
|
@@ -61,6 +84,10 @@ const __ = require('./_internal/placeholder')
|
|
|
61
84
|
* @since 1.6.0
|
|
62
85
|
*/
|
|
63
86
|
const pipe = function (...args) {
|
|
87
|
+
if (typeof args[0] == 'function') {
|
|
88
|
+
return args.reduce(funcConcat)
|
|
89
|
+
}
|
|
90
|
+
|
|
64
91
|
const funcs = args.pop()
|
|
65
92
|
const pipeline = funcs.reduce(funcConcat)
|
|
66
93
|
|
package/reduce.js
CHANGED
|
@@ -3,17 +3,17 @@ const __ = require('./_internal/placeholder')
|
|
|
3
3
|
const curry3 = require('./_internal/curry3')
|
|
4
4
|
const genericReduce = require('./_internal/genericReduce')
|
|
5
5
|
|
|
6
|
-
// _reduce(collection any, reducer function,
|
|
7
|
-
const _reduce = function (collection, reducer,
|
|
8
|
-
if (typeof
|
|
9
|
-
const actualInitialValue =
|
|
6
|
+
// _reduce(collection any, reducer function, initial function|any) -> Promise
|
|
7
|
+
const _reduce = function (collection, reducer, initial) {
|
|
8
|
+
if (typeof initial == 'function') {
|
|
9
|
+
const actualInitialValue = initial(collection)
|
|
10
10
|
return isPromise(actualInitialValue)
|
|
11
11
|
? actualInitialValue.then(curry3(genericReduce, collection, reducer, __))
|
|
12
12
|
: genericReduce(collection, reducer, actualInitialValue)
|
|
13
13
|
}
|
|
14
|
-
return isPromise(
|
|
15
|
-
?
|
|
16
|
-
: genericReduce(collection, reducer,
|
|
14
|
+
return isPromise(initial)
|
|
15
|
+
? initial.then(curry3(genericReduce, collection, reducer, __))
|
|
16
|
+
: genericReduce(collection, reducer, initial)
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
/**
|
|
@@ -21,55 +21,110 @@ const _reduce = function (collection, reducer, initialValue) {
|
|
|
21
21
|
*
|
|
22
22
|
* @synopsis
|
|
23
23
|
* ```coffeescript [specscript]
|
|
24
|
-
* type Foldable =
|
|
24
|
+
* type Foldable = Array|Set|Map|Generator|AsyncGenerator|{ reduce: function }|Object
|
|
25
25
|
*
|
|
26
26
|
* type Reducer = (
|
|
27
27
|
* accumulator any,
|
|
28
28
|
* item any,
|
|
29
|
-
* indexOrKey
|
|
30
|
-
*
|
|
29
|
+
* indexOrKey number|string|any,
|
|
30
|
+
* fold Foldable
|
|
31
31
|
* )=>(nextAccumulator Promise|any)
|
|
32
32
|
*
|
|
33
|
-
* type Resolver = (
|
|
33
|
+
* type Resolver = (fold Foldable)=>Promise|any
|
|
34
34
|
*
|
|
35
35
|
* reduce(
|
|
36
|
-
*
|
|
36
|
+
* fold Foldable,
|
|
37
37
|
* reducer Reducer,
|
|
38
|
-
*
|
|
38
|
+
* initial? Resolver|any
|
|
39
39
|
* ) -> result Promise|any
|
|
40
40
|
*
|
|
41
41
|
* reduce(
|
|
42
42
|
* reducer Reducer,
|
|
43
|
-
*
|
|
44
|
-
* )(
|
|
43
|
+
* initial? Resolver|any
|
|
44
|
+
* )(fold Foldable) -> result Promise|any
|
|
45
45
|
* ```
|
|
46
46
|
*
|
|
47
47
|
* @description
|
|
48
|
-
* Reduces a
|
|
48
|
+
* Reduces a foldable to a single value.
|
|
49
49
|
*
|
|
50
|
-
* The following data types are considered foldables:
|
|
51
|
-
* * `iterable`
|
|
52
|
-
* * `async iterable`
|
|
53
|
-
* * `object`; only the values of the object are transformed
|
|
54
|
-
*
|
|
55
|
-
* The following data types are considered iterable:
|
|
50
|
+
* The following data types are considered to be foldables:
|
|
56
51
|
* * `array`
|
|
57
52
|
* * `set`
|
|
58
53
|
* * `map`
|
|
54
|
+
* * `generator`
|
|
55
|
+
* * `async generator`
|
|
56
|
+
* * `object with .reduce method`
|
|
57
|
+
* * `object`
|
|
59
58
|
*
|
|
60
|
-
* The reducing operation is dictated by a provided reducer function, which defines a transformation between the accumulator and a given item of the
|
|
59
|
+
* The reducing operation is dictated by a provided reducer function, which defines a transformation between the accumulator and a given item of the foldable.
|
|
61
60
|
*
|
|
62
61
|
* ```javascript
|
|
63
62
|
* const reducer = function (accumulator, item) {
|
|
64
|
-
*
|
|
63
|
+
* // nextAccumulator is the result of some operation between accumulator and item
|
|
64
|
+
* // and becomes the accumulator for the next iteration and invocation of the reducer
|
|
65
65
|
* return nextAccumulator
|
|
66
|
-
* // nextAccumulator becomes the accumulator for the next iteration and invocation of the reducer
|
|
67
66
|
* }
|
|
68
67
|
* ```
|
|
69
68
|
*
|
|
70
|
-
* The
|
|
69
|
+
* The reducer function signature changes depending on the provided foldable.
|
|
70
|
+
*
|
|
71
|
+
* If the foldable is an array:
|
|
72
|
+
* ```coffeescript [specscript]
|
|
73
|
+
* reducer(
|
|
74
|
+
* accumulator any,
|
|
75
|
+
* item any,
|
|
76
|
+
* index number,
|
|
77
|
+
* fold Array
|
|
78
|
+
* ) -> nextAccumulator Promise|any
|
|
79
|
+
* ```
|
|
80
|
+
*
|
|
81
|
+
* If the foldable is a set:
|
|
82
|
+
* ```coffeescript [specscript]
|
|
83
|
+
* reducer(
|
|
84
|
+
* accumulator any,
|
|
85
|
+
* item any
|
|
86
|
+
* ) -> nextAccumulator Promise|any
|
|
87
|
+
* ```
|
|
88
|
+
*
|
|
89
|
+
* If the foldable is a map:
|
|
90
|
+
* ```coffeescript [specscript]
|
|
91
|
+
* reducer(
|
|
92
|
+
* accumulator any,
|
|
93
|
+
* item any,
|
|
94
|
+
* key any,
|
|
95
|
+
* fold Map
|
|
96
|
+
* ) -> nextAccumulator Promise|any
|
|
97
|
+
* ```
|
|
98
|
+
*
|
|
99
|
+
* If the foldable is a generator:
|
|
100
|
+
* ```coffeescript [specscript]
|
|
101
|
+
* reducer(
|
|
102
|
+
* accumulator any,
|
|
103
|
+
* item any
|
|
104
|
+
* ) -> nextAccumulator Promise|any
|
|
105
|
+
* ```
|
|
106
|
+
*
|
|
107
|
+
* If the foldable is a async generator:
|
|
108
|
+
* ```coffeescript [specscript]
|
|
109
|
+
* reducer(
|
|
110
|
+
* accumulator any,
|
|
111
|
+
* item any
|
|
112
|
+
* ) -> nextAccumulator Promise|any
|
|
113
|
+
* ```
|
|
114
|
+
*
|
|
115
|
+
* If the foldable is an object with a `.reduce` method, the reducer function signature is defined externally.
|
|
71
116
|
*
|
|
72
|
-
*
|
|
117
|
+
* If the foldable is a plain object:
|
|
118
|
+
* ```coffeescript [specscript]
|
|
119
|
+
* reducer(
|
|
120
|
+
* accumulator any,
|
|
121
|
+
* item any,
|
|
122
|
+
* key string,
|
|
123
|
+
* fold Object
|
|
124
|
+
* ) -> nextAccumulator Promise|any
|
|
125
|
+
* ```
|
|
126
|
+
*
|
|
127
|
+
* `reduce` executes a reducer function for each item of the array in order. If no initial value is provided, `reduce` uses the first item of the foldable as the initial value and starts iterating from the second item of the foldable.
|
|
73
128
|
*
|
|
74
129
|
* ```javascript [playground]
|
|
75
130
|
* const max = (a, b) => a > b ? a : b
|
|
@@ -78,7 +133,7 @@ const _reduce = function (collection, reducer, initialValue) {
|
|
|
78
133
|
* console.log(result) // 5
|
|
79
134
|
* ```
|
|
80
135
|
*
|
|
81
|
-
* If an initial value is provided, the accumulator starts as the initial value rather than the first item of the
|
|
136
|
+
* If an initial value is provided, the accumulator starts as the initial value rather than the first item of the foldable.
|
|
82
137
|
*
|
|
83
138
|
* ```javascript [playground]
|
|
84
139
|
* const add = (a, b) => a + b
|
|
@@ -87,7 +142,16 @@ const _reduce = function (collection, reducer, initialValue) {
|
|
|
87
142
|
* console.log(result) // 15
|
|
88
143
|
* ```
|
|
89
144
|
*
|
|
90
|
-
* If the
|
|
145
|
+
* If the reducer is asynchronous, all promises created by the reducer are resolved before continuing with the reducing operation.
|
|
146
|
+
*
|
|
147
|
+
* ```javascript [playground]
|
|
148
|
+
* const asyncAdd = async (a, b) => a + b
|
|
149
|
+
*
|
|
150
|
+
* const promise = reduce([1, 2, 3, 4, 5], asyncAdd, 0)
|
|
151
|
+
* promise.then(console.log) // 15
|
|
152
|
+
* ```
|
|
153
|
+
*
|
|
154
|
+
* If the initialization parameter is a function, it is treated as a resolver of the initial value and called with the foldable.
|
|
91
155
|
*
|
|
92
156
|
* ```javascript [playground]
|
|
93
157
|
* const concatSquares = (array, value) => array.concat(value ** 2)
|
|
@@ -122,7 +186,7 @@ const _reduce = function (collection, reducer, initialValue) {
|
|
|
122
186
|
* console.log(result) // 15
|
|
123
187
|
* ```
|
|
124
188
|
*
|
|
125
|
-
* `reduce` works for async
|
|
189
|
+
* `reduce` works for async generators.
|
|
126
190
|
*
|
|
127
191
|
* ```javascript [playground]
|
|
128
192
|
* const asyncAdd = async (a, b) => a + b
|
|
@@ -142,6 +206,23 @@ const _reduce = function (collection, reducer, initialValue) {
|
|
|
142
206
|
* reduce(Promise.resolve([1, 2, 3, 4, 5]), add, 0).then(console.log) // 15
|
|
143
207
|
* ```
|
|
144
208
|
*
|
|
209
|
+
* Any promises passed for the initial value are also resolved before further execution.
|
|
210
|
+
*
|
|
211
|
+
* ```javascript [playground]
|
|
212
|
+
* const add = (a, b) => a + b
|
|
213
|
+
*
|
|
214
|
+
* const promise = reduce([1, 2, 3, 4, 5], add, Promise.resolve(0))
|
|
215
|
+
* promise.then(console.log) // 15
|
|
216
|
+
* ```
|
|
217
|
+
*
|
|
218
|
+
* See also:
|
|
219
|
+
* * [forEach](/docs/forEach)
|
|
220
|
+
* * [map](/docs/map)
|
|
221
|
+
* * [filter](/docs/filter)
|
|
222
|
+
* * [transform](/docs/transform)
|
|
223
|
+
* * [flatMap](/docs/flatMap)
|
|
224
|
+
* * [some](/docs/some)
|
|
225
|
+
*
|
|
145
226
|
* @execution series
|
|
146
227
|
*
|
|
147
228
|
* @transducing
|