String.substr() 返回整个字符串?

String.substr() returning entire string?

我正在编写一个应用程序,它根据节之间的换行符数量将歌词格式化为 Google 幻灯片。为了保持逻辑简单,我一直在测试同一组歌词并找到单词 'foo' 的索引,并使用该索引创建一个子字符串以推入数组。该数组将用于在另一个函数中制作幻灯片。

当我尝试使用单词的索引来做 lyrics.substr(0, index) 时,它 returns 整个字符串,即使有一个有效的索引号。

function splitLyrics(lyrics) {
  var lyricsArray = []; 
  var lengthOfChunk = 0;
  var lengthOfSong = 0;
  var lyricsToPush;

  while (lyrics.length > 0) {
    Logger.log(lyrics);
    lengthOfSong = lyrics.length;
    lengthOfChunk = lyrics.indexOf('foo');
    Logger.log(lengthOfChunk);

    if (lengthOfChunk = -1) {
      lengthOfChunk = lengthOfSong;
    }

    lyricsToPush = lyrics.substr(0, lengthOfChunk);
    Logger.log(lyricsToPush);
    lyricsArray.push(lyricsToPush);

    lyrics = lyrics.substr(lengthOfChunk + 1);
  }

  return lyricsArray;
}

我希望日志的输出是 "Original lyrics blah blah"、索引号,然后是 "blah blah" 或任何子字符串输出。相反,我得到 "Original lyrics blah blah"、索引号,然后是 "Original lyrics blah blah"

针对您的情况的具体答案在于 if 语句中用于相等性检查的单个 =。它实际上是将 lengthOfChunk 的值设置为 -1,这意味着它采用 lyrics.substr(0),其中 returns 是完整的字符串。

但是,听起来您可以使用 lyrics.split("[your word]") 而不是手动填充数组并移动到 while 循环中的下一个字符串。如果我没看错问题,你可以:

splitLyrics = lyrics.split("foo");

这将为您提供一个包含所有不包括关键字的字符串的数组。