使用lodash在forEach循环中返回行为的快速问题。
该函数应检查字符串是否以预定义的唯一前缀数组结尾,如果是,则返回删除该前缀的字符串。
当我调用prefixParser(' someString')时,即使if语句匹配,它也总是返回(' someString')。不应该在foreEach / if内部返回整个函数吗?
或者我错过了有关执行上下文的内容?
prefixParser(str) {
let value= str;
this.prepostfix.forEach( prefix => {
if(_.startsWith(value,prefix)){
return _.trimStart(value, prefix);
}
});
return value
}
将返回更改为
value = _.trimStart(value, prefix)
解决了这个问题,但我想了解这里的机制。谢谢!
答案 0 :(得分:0)
如果我没有弄错,箭头函数只对函数绑定产生影响,因此在forEach循环中的返回仅退出forEach函数。您的prefixParser函数将继续运行,直到返回值为止。
此外,您正在针对this.prepostfix中定义的数组运行forEach函数,但为了使结果可用于函数的其余部分,您需要将其分配给变量。以下是函数的简化版本,它应该将forEach的结果或默认值分配给提交的字符串:
prefixParser(str) {
let value = str;
this.prepostfix.forEach(prefix => {
if (_.startsWith(value, prefix)) {
value = _.trimStart(value, prefix);
}
});
return value
}