【问题标题】:Recursive reduce in JavaScriptJavaScript中的递归减少
【发布时间】:2011-06-07 02:46:57
【问题描述】:


我对 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

谁能解释一下为什么?

【问题讨论】:

    标签: javascript recursion reduce


    【解决方案1】:

    在那个else 块中,你必须

    return rec_reduce( ... )
    

    【讨论】:

    • 非常感谢!!我时不时忘记这个返回的事情,主要是因为每次我需要一些递归的东西,我都会在 Scheme 中对其进行原型化——没有返回语句;)再次感谢!
    • @trzewiczek 愿意接受吗?也非常适合您的个人资料。
    • 抱歉——只是我没有经验——忘了!!
    【解决方案2】:

    另一种方法:

    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

    【讨论】:

      猜你喜欢
      • 2013-10-10
      • 1970-01-01
      • 2021-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-15
      • 1970-01-01
      • 2017-04-09
      相关资源
      最近更新 更多