【问题标题】:Javascript return behavior inside a forEach loopforEach 循环中的 Javascript 返回行为
【发布时间】:2017-02-04 21:01:11
【问题描述】:

关于使用 lodash 的 forEach 循环内的返回行为的快速问题。

该函数应检查字符串是否以预定义的唯一前缀数组结尾,如果是,则返回删除该前缀的字符串。

当我调用 prefixParser('someString') 时,即使 if 语句匹配,它也总是返回 ('someString')。 foreEach/if 中的 return 不应该结束整个函数吗?

或者我错过了关于执行上下文的一些东西?

prefixParser(str) {
        let value= str;

        this.prepostfix.forEach( prefix => {
            if(_.startsWith(value,prefix)){
                return _.trimStart(value, prefix);
            }
        });

        return value
    }

改变返回到

value = _.trimStart(value, prefix)

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

【问题讨论】:

标签: javascript lodash


【解决方案1】:

如果我没记错的话,箭头函数只对 a 函数绑定有影响,所以你在 forEach 循环中的 return 只会退出 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
}

【讨论】:

  • forEach() 只能返回 undefined,所以这行不通
  • 感谢您的信息,相应地更新代码。现在应该可行了。
猜你喜欢
  • 1970-01-01
  • 2021-08-12
  • 2016-05-22
  • 2016-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-10
相关资源
最近更新 更多