Travis build: 1335

This commit is contained in:
30secondsofcode
2018-01-23 14:01:35 +00:00
parent ff4848b0f5
commit f264072af0
3 changed files with 72 additions and 8 deletions

View File

@ -142,6 +142,7 @@ average(1, 2, 3);
* [`without`](#without)
* [`zip`](#zip)
* [`zipObject`](#zipobject)
* [`zipWith`](#zipwith-)
</details>
@ -1872,6 +1873,47 @@ zipObject(['a', 'b'], [1, 2, 3]); // {a: 1, b: 2}
<br>[⬆ Back to top](#table-of-contents)
### zipWith ![advanced](/advanced.svg)
Creates an array of elements, grouped based on the position in the original arrays and using function as the last value to specify how grouped values should be combined.
Check if the last argument provided in a function.
Use `Math.max()` to get the longest array in the arguments.
Creates an array with that length as return value and use `Array.from()` with a map-function to create an array of grouped elements.
If lengths of the argument-arrays vary, `undefined` is used where no value could be found.
The function is invoked with the elements of each group `(...group)`.
```js
const zipWith = (...arrays) => {
const length = arrays.length;
let fn = length > 1 ? arrays[length - 1] : undefined;
fn = typeof fn == 'function' ? (arrays.pop(), fn) : undefined;
const maxLength = Math.max(...arrays.map(x => x.length));
const result = Array.from({ length: maxLength }).map((_, i) => {
return Array.from({ length: arrays.length }, (_, k) => arrays[k][i]);
});
return fn ? result.map(arr => fn(...arr)) : result;
};
```
<details>
<summary>Examples</summary>
```js
zipWith([1, 2], [10, 20], [100, 200], (a, b, c) => a + b + c); // [111,222]
zipWith(
[1, 2, 3],
[10, 20],
[100, 200],
(a, b, c) => (a != null ? a : 'a') + (b != null ? b : 'b') + (c != null ? c : 'c')
); // [111, 222, '3bc']
```
</details>
<br>[⬆ Back to top](#table-of-contents)
---
## 🌐 Browser

File diff suppressed because one or more lines are too long

View File

@ -8,7 +8,7 @@ Creates an array with that length as return value and use `Array.from()` with a
If lengths of the argument-arrays vary, `undefined` is used where no value could be found.
The function is invoked with the elements of each group `(...group)`.
``` js
```js
const zipWith = (...arrays) => {
const length = arrays.length;
let fn = length > 1 ? arrays[length - 1] : undefined;
@ -16,12 +16,17 @@ const zipWith = (...arrays) => {
const maxLength = Math.max(...arrays.map(x => x.length));
const result = Array.from({ length: maxLength }).map((_, i) => {
return Array.from({ length: arrays.length }, (_, k) => arrays[k][i]);
})
});
return fn ? result.map(arr => fn(...arr)) : result;
}
};
```
``` js
zipWith([1, 2], [10, 20], [100, 200], (a,b,c) => a + b + c); // [111,222]
zipWith([1, 2, 3], [10, 20], [100, 200], (a,b,c) => (a != null ? a : 'a') + (b != null ? b:'b') + (c != null ? c : 'c')); // [111, 222, '3bc']
```js
zipWith([1, 2], [10, 20], [100, 200], (a, b, c) => a + b + c); // [111,222]
zipWith(
[1, 2, 3],
[10, 20],
[100, 200],
(a, b, c) => (a != null ? a : 'a') + (b != null ? b : 'b') + (c != null ? c : 'c')
); // [111, 222, '3bc']
```