所以也许我让这个太复杂了,但我想要的是一个私有函数,我可以从公共方法调用。私有函数是递归的。我已经经历了几次迭代,包括尝试在各种环境中绑定它,但是到目前为止还没有。
我的输入是这样的:
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来检查。
答案 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(...) {
// ...
}
};