JavaScript中由map函数组成的reduce函数
reduce function composed of map function in JavaScript
假设我们有
var i = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
想reduce()
喜欢
var plus = function(a, b)
{
return a + b;
};
var s = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
.reduce(plus);
console.log(s);
现在,我想从 map()
函数中组合 reduce()
函数本身。
你会怎么做?什么方法最聪明?
编辑:
在评论和回答中,很多人声称fold
/reduce
可以构成地图,在浅层次上,这是正确的,但是,在范畴论中,从根本上说reduce/fold泛化为 Catamorphism 并且都是关于 functors (map
) 的,它被称为 F-algebra.
如果您尝试使用 reduce 构建 map 函数,您可以执行以下操作(我提供的示例将使用内置函数并且仅适用于数组!):
var numbers = [1,2,3,4,5];
var map = function(arr, callback) {
return arr.reduce(function(start, value) {
start.push(callback(value));
return start;
}, []);
};
var newArray = map(numbers, function(value) {
return value * 3;
});
console.log(newArray); // prints [3,6,9,12,15]
这将遍历我们的数字数组中的每个值,使用我们正在循环的当前值调用(执行)回调函数,然后将该值推送到一个空数组,该数组将在减少结束。也就是说,它会将我们回调函数的结果映射到一个新的数组中!
也就是说,如果您对函数式编程感兴趣,我鼓励您查看 underscorejs's annotated source code。
map
returns 数组中的每个值对应一个值,因此结果将是一个与输入数组一样大的数组。从中获取一个值的唯一方法是只向其中发送一个值。
[[1,2,3,4,54]].map(
function(d){
sum = d.reduce(function(s,d){
return s+d
});
console.log(sum)
}
);
假设我们有
var i = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
想reduce()
喜欢
var plus = function(a, b)
{
return a + b;
};
var s = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
.reduce(plus);
console.log(s);
现在,我想从 map()
函数中组合 reduce()
函数本身。
你会怎么做?什么方法最聪明?
编辑:
在评论和回答中,很多人声称fold
/reduce
可以构成地图,在浅层次上,这是正确的,但是,在范畴论中,从根本上说reduce/fold泛化为 Catamorphism 并且都是关于 functors (map
) 的,它被称为 F-algebra.
如果您尝试使用 reduce 构建 map 函数,您可以执行以下操作(我提供的示例将使用内置函数并且仅适用于数组!):
var numbers = [1,2,3,4,5];
var map = function(arr, callback) {
return arr.reduce(function(start, value) {
start.push(callback(value));
return start;
}, []);
};
var newArray = map(numbers, function(value) {
return value * 3;
});
console.log(newArray); // prints [3,6,9,12,15]
这将遍历我们的数字数组中的每个值,使用我们正在循环的当前值调用(执行)回调函数,然后将该值推送到一个空数组,该数组将在减少结束。也就是说,它会将我们回调函数的结果映射到一个新的数组中!
也就是说,如果您对函数式编程感兴趣,我鼓励您查看 underscorejs's annotated source code。
map
returns 数组中的每个值对应一个值,因此结果将是一个与输入数组一样大的数组。从中获取一个值的唯一方法是只向其中发送一个值。
[[1,2,3,4,54]].map(
function(d){
sum = d.reduce(function(s,d){
return s+d
});
console.log(sum)
}
);