我对 JavaScript 很陌生,不理解它的一些行为。我想编写一个递归版本的reduce函数,可以在 雄辩的 JavaScript 书。这是我的代码:

function rec_reduce( fn, base, list ) {
    if( list.length === 0 ) {
        return base;
    }
    else {
        rec_reduce( fn, fn( base, list[ 0 ] ), list.slice( 1 ) );
    }
}
print( rec_reduce( Math.min, 100, [ 5, 3, 7, 2, 6, 5 ] ));

结果是:

undefined

为了看看发生了什么,我输入:

print( base );

作为函数的第一行,结果是:

100
5
3
3
2
2
2
undefined

谁能帮我解释一下为什么?

有帮助吗?

解决方案

在那里面 else 阻止,你必须

return rec_reduce( ... )

其他提示

另一种方法:

减少文件.js:

function reduce(arr, func, initv){
      if(arr.length) return reduce(arr.slice(1), func, func(initv, arr[0]))
      else return initv
}
module.exports = reduce

然后你将它用作:

reduce = require('./reduce_file.js')
console.log(reduce([1,2,3,4], function(prev, curr) {
  return prev + curr
}, 0))

结果:

10 

从 1+2+3+4=10

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top