diff --git a/snippets/zipWith.md b/snippets/zipWith.md index 55b6dd446..f0cb5e7d2 100644 --- a/snippets/zipWith.md +++ b/snippets/zipWith.md @@ -2,22 +2,20 @@ 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. +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)`. ```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; +const zipWith = (...array) => { + 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])), + ); }; ```