如何编写这样的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接受一个函数和之后的任意数量的数组
答案 0 :(得分:2)
像
这样的东西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] }));
});
}