30秒学会 JavaScript 片段 · 2020年1月6日

30秒学会 JavaScript 片段 – zip

Creates an array of elements, grouped based on the position in the original arrays.

Use Math.max.apply() 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.

代码片段

const zip = (...arrays) => {
  const maxLength = Math.max(...arrays.map(x => x.length));
  return Array.from({ length: maxLength }).map((_, i) => {
    return Array.from({ length: arrays.length }, (_, k) => arrays[k][i]);
  });
};

使用样例

zip(['a', 'b'], [1, 2], [true, false]); // [['a', 1, true], ['b', 2, false]]
zip(['a'], [1, 2], [true, false]); // [['a', 1, true], [undefined, 2, false]]