接受多个数组作为参数的javascript映射函数

javascript map function accepting multiple array as arguments

本文关键字:参数 javascript 映射函数 数组      更新时间:2023-09-26

如何编写这样的js函数?

map(add, [1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12])
 => [15, 18, 21, 24]

我正在尝试编写clojure map函数的本地js版本

(map + [1 2 3] [4 5 6])
=> [5 7 9]

其中map接受一个函数和该之后的任意数量的数组

类似的东西

pythonic_map = function(fun) {
    var args = [].slice.call(arguments, 1)
    return args[0].map(function(_, i) {
        return fun.apply(null, args.map(function(x) { return x[i] }));
    });
}

示例:

function add(a, b, c) {
    return a + b + c
}
z = pythonic_map(add, [1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12])
console.log(z) // [15,18,21,24]

这使用第一个参数的长度,使用最短/最长的参数:

pythonic_map = function(fun) {
    var args = [].slice.call(arguments, 1);
    return args.reduce(function(m, x) {
        return (x.length < m.length) ? x : m; // or > for the longest
    }).map(function(_, i) {
        return fun.apply(null, args.map(function(x) { return x[i] }));
    });
}