首页 > 解决方案 > 带有回调 JS 的递归函数

问题描述

我有这两个递归函数。第一个有效,但是当我尝试将该quantityColumn函数作为callback第二个函数时,我收到一个错误,即callback is not a function. 任何想法我做错了什么?

var sumColumn = function(lineNumber) {
    return lineNumber === 0 
        ? quantityColumn(0)
        : quantityColumn(lineNumber) + sumColumn(lineNumber -1)
}

sumColumn(lineCount) // returns 9 

var sumColumn = function(callback, lineNumber) {
    return lineNumber === 0 
        ? callback(0)
        : callback(lineNumber) + sumColumn(callback(lineNumber -1), lineNumber -1)
}
sumColumn(quantityColumn, lineCount) // callback is not a function

如果需要更多代码。这是quantityColumn功能。另外值得注意的current.getSublistValue是,第 3 方 API (NetSuite) 基本上只返回表格上的行/行的交点。

 var columnValue = R.curry(function(getSublistValue, sublistId, column, i) {
     return getSublistValue({
         sublistId: sublistId,
         fieldId: column,
         line: i              
      })
   }
)
var itemSublist(current.getSublistValue)('item')
var quantityColumn = itemSublist('quantity')
var lineCount = current.getLineCount('item') - 1 // first index is 0

quantityColumn(5) // 2
quantityColumn(4) // 1
quantityColumn(3) ...

var sumColumn = function(lineNumber) {
    return lineNumber === 0 
        ? quantityColumn(0)
        : quantityColumn(lineNumber) + sumColumn(lineNumber -1)
}
sumColumn(lineCount) // returns 9

标签: javascriptrecursioncallbackfunctional-programming

解决方案


var sumColumn = function(lineNumber) {
    return lineNumber === 0 
        ? quantityColumn(0)
        : quantityColumn(lineNumber) + sumColumn(lineNumber -1)
}

sumColumn(lineCount) // returns 9 

var sumColumn = function(callback, lineNumber) {
    return lineNumber === 0 
        ? callback(0)
        : callback(lineNumber) + sumColumn(callback, lineNumber -1)
}
sumColumn(quantityColumn, lineCount) // callback is not a function

在这一行callback(lineNumber) + sumColumn(callback(lineNumber -1), lineNumber -1)中,您正在调用函数callback(带有参数 lineNumber-1),您想要传递它


推荐阅读