2019-06-29
描述
创建一个数组中的数组,通过 zip 来分解数组中的元素。
提示
- 使用
Math.max.apply()
获取数组中最长的子数组长度 - 使用
Array.prototype.map()
为每一个元素创建一个数组 - 使用
Array.prototype.reduce()
和Array.prototype.forEach()
来对数组中的元素进行元素的重新分组
代码
const unzip = arr =>
arr.reduce(
(acc, val) => (val.forEach((v, i) => acc[i].push(v)), acc),
Array.from({
length: Math.max(...arr.map(x => x.length))
}).map(x => [])
);
示例
把二维数组进行纵向的重新分组:
unzip([['a', 1, true], ['b', 2, false]]); // [['a', 'b'], [1, 2], [true, false]]
unzip([['a', 1, true], ['b', 2]]); // [['a', 'b'], [1, 2], [true]]