javascript - JavaScript中由map函数组成的reduce函数

标签 javascript node.js functional-programming reduce map-function

假设我们有

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 可以组成映射,在浅层次上,这可能是真的,但是,在范畴论中,从根本上减少/fold 被推广到变形论,它都是关于仿函数(映射)的,它被称为F-代数

https://en.wikipedia.org/wiki/Catamorphism

https://en.wikipedia.org/wiki/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 .

关于javascript - JavaScript中由map函数组成的reduce函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27810549/

相关文章:

scala - 函数式编程标量

java - 用 Java-8 Streams 替换 'for' 循环中的 if-else

haskell - 是否可以在 Haskell 中使用 if 函数使用模式匹配?

javascript - 在 promise 之外抛出错误

javascript - 双倍可乐挑战,JavaScript 代码错误?

node.js - 我应该在嵌套的 Promise 上调用 .catch 吗?

node.js - ELOOP : too many symbolic links encountered

javascript - 无法获取作用域之外的函数

php - 存储在 cookie 文件中的信息

JavaScript - 代理集与 defineProperty