为什么不是reduce working(JS)的递归定义?

Dav*_* J. 2 javascript recursion reduce

我试图使用递归函数重新定义Javascript的reduce.这是我的尝试,但不起作用.如果有人可以稍微改变它以使其工作,那将是很好的,因为我会更好地理解它.(这是功能-javascript-workshop中的练习).

function reduce(arr, fn, initial) {
  if (arr.length) {
    var newArr = arr.slice(1, arr.length);
    return reduce(newArr, fn, fn(arr[0]));
  } else {
    return initial;
  }
}

module.exports = reduce
Run Code Online (Sandbox Code Playgroud)

它给了我以下隐秘的错误消息,我不知道如何解释:

/usr/local/lib/node_modules/functional-javascript-workshop/exercises/basic_recursion/exercise.js:13
    prev[curr] = ++prev[curr] || 1
                            ^

TypeError: Cannot create property 'undefined' on string 'exercitation'
    at /usr/local/lib/node_modules/functional-javascript-workshop/exercises/basic_recursion/exercise.js:13:29
    at reduce (/home/david/node-school/functional-workshop/solution.js:7:28)
    at /usr/local/lib/node_modules/functional-javascript-workshop/exercises/basic_recursion/exercise.js:12:10
    at obtainResult (/usr/local/lib/node_modules/functional-javascript-workshop/exercises/runner.js:100:21)
    at Exercise.<anonymous> (/usr/local/lib/node_modules/functional-javascript-workshop/exercises/runner.js:66:27)
    at next (/usr/local/lib/node_modules/functional-javascript-workshop/node_modules/workshopper-exercise/exercise.js:188:19)
    at /usr/local/lib/node_modules/functional-javascript-workshop/node_modules/workshopper-exercise/exercise.js:195:7
    at Exercise.<anonymous> (/usr/local/lib/node_modules/functional-javascript-workshop/exercises/runner.js:34:5)
    at next (/usr/local/lib/node_modules/functional-javascript-workshop/node_modules/workshopper-exercise/exercise.js:188:19)
    at /usr/local/lib/node_modules/functional-javascript-workshop/node_modules/workshopper-exercise/exercise.js:195:7
Run Code Online (Sandbox Code Playgroud)

the*_*ude 6

您需要更新累加器:

function reduce(arr, fn, acc) {
  if (arr.length) {
    var newArr = arr.slice(1, arr.length);
    acc = fn(arr[0], acc) 
    return reduce(newArr, fn, acc);
  } else {
    return acc;
  }
}

console.log(reduce([1,2,3], (val, sum) => sum + val, 0))
Run Code Online (Sandbox Code Playgroud)

  • 那就像你的意见那样.(谢谢!) (2认同)