我对JavaScript非常陌生,对它的一些行为也不太了解。我想写一个在Eloquent JavaScript书中找到的reduce函数的递归版本。这是我的代码:
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谁能给我解释一下为什么?
发布于 2011-01-11 19:11:52
在else块中,您必须
return rec_reduce( ... )发布于 2014-05-29 05:55:36
另一种方法是:
reduce_file.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
https://stackoverflow.com/questions/4656943
复制相似问题