JavaScript中的递归减少
问题描述:
我对JavaScript很陌生,不理解它的一些行为。我想写一本在Eloquent 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
谁能解释我w HY?
答
在这种else
块,你必须
return rec_reduce(...)
答
另一种方式来做到这一点:
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
THX很多!!我现在忘记了这个返回的事情,主要是因为每一个thime我需要递归的东西,我在原型中的原型 - 没有返回声明;)再次! – trzewiczek 2011-01-11 11:18:21