递归嵌套私有函数

时间:2014-08-23 18:41:13

标签: javascript recursion

所以也许我让这个太复杂了,但我想要的是一个私有函数,我可以从公共方法调用。私有函数是递归的。我已经经历了几次迭代,包括尝试在各种环境中绑定它,但是到目前为止还没有。

我的输入是这样的:

var row = new Row(["", "", ["AB", "AC"], "TR"]);
var badAbbrs = ["AC", "AD", "XX"];
row.badAbbreviations(badAbbrs);

我想要的是:["", "", "AC", ""]

这是我目前尝试的相关部分:

function Row(r) {
  this.data = r;

  this.check = function (coll) {
    function icheck (val) {
      if (val.length == 0) {
        return "";
      } else {
        if (_.isArray(val) ) {
          var out = _.compact(val.map(icheck) );
          return out.length == 0 ? "" : out;
        } else {
          return (coll.indexOf(val.replace("*",""))) > -1 ? val : ""
        }
      }
    }
  }
}

Row.prototype.badAbbreviations = function (badAbbrs) {
  var fcheck = this.check(badAbbrs);
  return this.data.map(fcheck);
}

我得到的错误是:TypeError :( class)@ 398632c0不是函数,它是未定义的。错误行是'返回this.data.map(fcheck)'线。

编辑:输入拼写错误。编辑一直在改变fcheck来检查。

2 个答案:

答案 0 :(得分:1)

不确定哪个方法(类)@ 398632c0,但我认为问题是:

var fcheck = this.check(badAbbrs);

我认为你不能将Row.check()与Row.prototype.badAbbreviations.check()链接起来

为什么不在Row对象函数中移动badAbbreviations方法。我认为会修复(类)@ 398632c0(无论是什么)未定义

答案 1 :(得分:1)

提供正式答案:

this.check不返回函数,返回undefined。因此,在执行

时会收到该错误消息
return this.data.map(fcheck);

因为fcheck不是函数。将this.check更改为 return 功能:

this.check = function(...) {
    return function icheck(...) {
        // ...
    }
};