Update snippet descriptions

This commit is contained in:
Isabelle Viktoria Maciohsek
2020-10-22 20:24:44 +03:00
parent 5cb69e3c5c
commit aa425812b4
40 changed files with 151 additions and 87 deletions

View File

@ -3,17 +3,18 @@ title: zipWith
tags: array,advanced
---
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.
Creates an array of elements, grouped based on the position in the original arrays and using a function to specify how grouped values should be combined.
- Check if the last argument provided is 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)`.
- Use `Array.from()` to create an array with appropriate length and a mapping function to create 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.
```js
const zipWith = (...array) => {
const fn = typeof array[array.length - 1] === 'function' ? array.pop() : undefined;
const fn =
typeof array[array.length - 1] === 'function' ? array.pop() : undefined;
return Array.from({ length: Math.max(...array.map(a => a.length)) }, (_, i) =>
fn ? fn(...array.map(a => a[i])) : array.map(a => a[i])
);
@ -26,6 +27,7 @@ zipWith(
[1, 2, 3],
[10, 20],
[100, 200],
(a, b, c) => (a != null ? a : 'a') + (b != null ? b : 'b') + (c != null ? c : 'c')
(a, b, c) =>
(a != null ? a : 'a') + (b != null ? b : 'b') + (c != null ? c : 'c')
); // [111, 222, '3bc']
```