为什么在函数上使用ONLY indexOf返回与使用indexOf不同



你好,所以我正在努力解决这一个练习。并尝试两种方法:直接console.log字符串.indexOf(subString(和使用函数计算字符串上特定字符/单词的出现次数,然后返回两个不同的值。为什么?这是代码:

const longText = `This is a very very long text. Do you understand how very long is this? Good for yah!`
const word = "very"
console.log(longText.indexOf(word));
function checkWord(longText, position) {
var n = 0;
var position = 0;
while (true) {
position = longText.indexOf(word, position)
if (position != -1) {
n++;
position += word.length;
} else {
break;
}
}
return n;
}
console.log(checkWord(longText, word));
// Expected output:   
//> 10 
//> 3

longText.indexOf(word)不返回出现次数
它返回第一次出现的索引(在本例中为第11个字符(。由于字符串的字符从索引0开始,这意味着它从索引10开始。

因此,不完全确定您要做什么,但您的代码似乎正在计算word发生的位置(longText.indexOf(word)(和n发生的次数。你这样做似乎是故意的,因为我可以看到你正在计算字符串最后一次找到的位置,将单词的长度添加到当前位置,然后从该位置再次搜索作为新的起始位置。。。position = longText.indexOf(word, position)

尽管console.log(checkWord(longText, word))这里的单词是一个字符串,但是

// writing in typescript
function checkWord(longText: string, position: string) {
var n = 0;
var position = 0;

您有一个名为position的变量,其名称与参数相同。你应该避免这样做,因为这会引起混乱。。。就像我试图理解一样。

function checkWord(longText: string, indexWord: string) {
var n = 0;
var position = 0;
while (true) {
position = longText.indexOf(indexWord, position);
if (position != -1) {
n++;
position += indexWord.length;
} else {
break;
}
}
return n;
}

这就是功能应该是什么。

针对您看到的结果,10表示单词第一次被找到的位置的字符索引,3表示单词在字符串中被找到的次数。

最新更新