Javascript在forEach循环中返回行为

时间:2017-02-04 21:01:11

标签: javascript lodash

使用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)

解决了这个问题,但我想了解这里的机制。谢谢!

1 个答案:

答案 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
}