如何从JavaScript的for循环内部获取价值?

时间:2019-07-15 11:14:16

标签: javascript typescript promise

我需要Typescript(javascript)帮助,等待for循环中的代码首先完成

我有输入(textbox)从用户那里获取字符串并在其中搜索#Number(#50),我已经完成了读取'#'起始索引的功能,我只需要在#之后获取数字所以我使用了for循环将每个字符与SPACE进行比较以读取数字值,但是我相信它在for循环完成之前返回的返回值如何使返回等待FOR循环完成并更新内部变量在它返回值之前...

  readNumber(text: string): number {
    const start = text.indexOf('#') + 1;
    let newText = '';
    for (let index = start; index < text.length; index++) {
      if (text.slice(index, 1) === ' ') {
        newText = text.slice(start, index - start);
      }
    }
    return +newText;
  }

如果用户将输入此值“ employee#56 cv”,则需要获得此输出56

1 个答案:

答案 0 :(得分:0)

分配给newText后,循环将继续,是的。如果要在此时停止它,请使用break

newText = text.slice(start, index - start);
break;

但是您也可以通过再次使用indexOf来完全避免循环:

readNumber(text: string): number {
  const start = text.indexOf('#') + 1;
  if (start === -1) {
      return 0; // Or whatever you should return when there's no # character
  }
  const end = text.indexOf(' ', start);
  if (end === -1) {
      end = text.length;
  }
  return +text.substring(start, end);
}

或正则表达式:

readNumber(text: string): number {
  const match = /[^#]*#(\d+)/.exec(text);
  if (!match) {
      return 0; // Or whatever you should return when there's no # character
  }
  return +match[1];
}

与您的示例略有不同,因为它不查找空格,而是查找数字。要使用空格代替:

readNumber(text: string): number {
  const match = /[^#]*#([^ ]*)(?: |$)/.exec(text);
  if (!match) {
      return 0; // Or whatever you should return when there's no # character
  }
  return +match[1];
}