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");
这将为您提供一个包含所有不包括关键字的字符串的数组。
我正在编写一个应用程序,它根据节之间的换行符数量将歌词格式化为 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");
这将为您提供一个包含所有不包括关键字的字符串的数组。