2019-07-05 描述 创建一个数组,其元素应按照原始数组中的位置进行分组。具体如何分组、是否应该被合并应以提供的函数的返回值作为最终值。 提示 检测提供的最后一个参数是否为函数 使用 Math.max() 获取参数中最长数组的长度 创建一个长度为第二步结果的数组作为返回值 使用带有迭代功能的 Array.from ..

Array - zipWith (advanced)

2019-07-05

描述

创建一个数组,其元素应按照原始数组中的位置进行分组。具体如何分组、是否应该被合并应以提供的函数的返回值作为最终值。

提示

代码

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]))
  );
};

示例

对传入的数组进行纵向相加:

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']

返回总目录

每天 30 秒系列之 JavaScript 代码

  • JavaScript

    JavaScript 一种动态类型、弱类型、基于原型的直译式脚本语言,内置支持类型。它的解释器被称为 JavaScript 引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在 HTML 网页上使用,用来给 HTML 网页增加动态功能。

    425 引用 • 1013 回帖 • 888 关注
  • 30Seconds

    精选的常见前端问题集,帮助您踏踏实实走好每一步。

    英文原文请看 30-seconds

    268 引用 • 284 回帖 • 3 关注
  • 代码
    195 引用 • 439 回帖 • 2 关注
回帖   
请输入回帖内容...