Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
@skava/modules / ___dist / chain-able / src / deps / util / zipWith.js
Size: Mime:
"use strict";

const curry = require("../fp/curry");
/**
 * Creates a new list out of the two supplied by applying the function to each
 * equally-positioned pair in the lists. The returned list is truncated to the
 * length of the shorter of the two input lists.
 *
 * @function
 * @memberOf util
 * @since v0.1.0
 * @param {Function} fn The function used to combine the two elements into one value.
 * @param {Array} list1 The first array to consider.
 * @param {Array} list2 The second array to consider.
 * @return {Array} The list made by combining same-indexed elements of `list1` and `list2`
 *         using `fn`.
 *
 * @category List
 * @sig (a,b -> c) -> [a] -> [b] -> [c]
 * @symb zipWith(fn, [a, b, c], [d, e, f]) = [fn(a, d), fn(b, e), fn(c, f)]
 *
 * @example
 *
 *      var f = (x, y) => {
 *        // ...
 *      };
 *      zipWith(f, [1, 2, 3], ['a', 'b', 'c']);
 *      //=> [f(1, 'a'), f(2, 'b'), f(3, 'c')]
 *
 */


module.exports = curry(3, function zipWith(fn, a, b) {
  const result = [];
  let idx = 0;
  const len = Math.min(a.length, b.length);

  while (idx < len) {
    result[idx] = fn(a[idx], b[idx]);
    idx += 1;
  }

  return result;
});