只是为了使用indexOf()
方法进行练习并更好地熟悉它的工作方式以及可以用它做什么,我希望逐个打印短语中每个字符的索引。
我可以通过这种方式手动成功完成:
// Print index for char of phrase (case insensitive):
let phrase = "ab";
alert(phrase.indexOf("a")); // 0
alert(phrase.indexOf("b")); // 1
alert(phrase.indexOf("z")); // -1
但是当我尝试使用循环时,我失败了:
// Print char by index:
let phrase = "ab";
for (let i = -1; i < phrase.indexOf(); i++) {
alert(phrase.length[i]);
}
我还尝试使用正则表达式来定位phrase
内的每个字符,但也失败了:
let phrase = "ab";
for (let i = -1; i < phrase.indexOf(/./); i++) {
alert(phrase.length[i]);
}
为了澄清,我的目标是第一次提醒0
,第二次提醒1
。我只想打印每个字符的索引,而不是字符长度,可以很容易地完成:
phrase.length // 2.
如何在单独的警报中打印每个字符的索引?
在循环中使用indexOf()
来了解这种语法非常重要。
答案 0 :(得分:1)
不要使用indexOf
。您可以使用此方法获取字符串中某个字符的位置(索引):
字符串具有length属性,可以迭代:
let phrase = "aaabbbaaaabbb"
function getAllIndices(stringInput) {
for (let i = 0; i < stringInput.length; i++) {
//you simply need to output i.
console.log(stringInput[i] + " > " + i);
}
}
getAllIndices(phrase);
&#13;
答案 1 :(得分:1)
你可以这样做:
for(let i=0; i<phrase.length; i++) {
console.log(phrase.indexOf(phrase[i]));
}
答案 2 :(得分:1)
虽然并非总是如此:for
循环的最常见格式是:
for (let i = 0; i < someVariable.length; i++) { //...some code }
事实上,这就是你想要的。
这意味着:
i = 0
)// ...some code
)i++
)someVariable.length
)* *最后一步可能看起来有点令人困惑。请记住:指数从0开始,但长度计数正常 - 因此从1开始。所以长度为3的字符串,比如'c'+'a'+'t'。由索引[0,1,2]中的字符组成。所以你想要循环,停在最后一个索引 - 2 - 这是(总是)一个少那个长度。 (但老实说,这是过度解释它。简短的回答是:如果你想循环一些东西 - 在100个中有99次你想要精确的for loop
格式放在首位。
所以看看你的例子:我们想要解决三件事:
let i = 0;
(记住它在运行一次之前不会增加i < phrase.length;
(i < phrase.indexOf()
并不意味着什么。phrase.indexOf()
是一个函数,而不是一个数字。)phrase.length
表示“告诉我变量短语的长度。”它只返回一个数字。 (所以phrase.length[i]
并不意味着什么)。如果你想提醒这个索引上的任何字母,它只是phrase[i]
。 * *如果通过在字符串后面添加[#]来获取字母的语法看起来很奇怪 - 那就是因为它更适合于数组。如果你有let arr = ['a', 'b', 'c']
,那么肯定,我可以看到为什么JavaScript开发人员说“让我们快速获取,哦,数组的索引2处的值。那么arr[2]
怎么样?但是为了保持一致性,他们说:“是的,让我们把这种能力赋予弦乐。”如果你考虑一下,字符串只是一组字母。
更新:我刚注意到你想要每个字母的索引,而不是字母itselt。那么......从技术上讲,你可以alert(i)
。就是这样,那就是索引。但如果你想知道我们正在谈论的字母,我会做alert("Letter " + phrase[i] + " is at index " + i)
所以我们的最终答案是:
let phrase = "ab";
for (let i = 0; i < phrase.length; i++) {
alert("Letter " + phrase[i] + " is at index " + i)
}
在循环中使用
indexOf()
来了解这种语法非常重要。
你绝不会将indexOf()
用于此类事情。这不仅是不必要的,而且是错误的。如果您使用字符串banana
并尝试使用indexOf()
来(重新)检查每个字母位置,那么您将获得0,1,2,1,2,1
。为什么?因为indexOf()
仅返回该字母的第一个实例的索引。
indexOf()
不是你可能与for循环配对的东西 - 至少不是for循环搜索相同的字符串。它本身就是一个循环。它的工作是阻止你必须写一个for循环来找到“ab”中的“b”索引。它会为你做。
答案 3 :(得分:0)
如果你绝对想在循环中使用indexOf,你可以这样做:
let phrase = "ab";
Array.from(phrase).forEach(char => {
console.log(phrase.indexOf(char))
})
&#13;
但这是没有用的,因为有更简单的方法可以实现这一目标,但由于它看起来像是为了学习目的,我希望这个答案可以帮到你!
答案 4 :(得分:0)
要在循环中打印每个字符的索引,您不需要indexOf()
let phrase = "ab";
for (let i = 0; i < phrase.length; i++) {
alert (i);
}
因为i
是您需要的确切索引。
事实上,如果您在循环中使用indexOf()
,那就是它的样子:
let phrase = "ab";
for (let i = 0; i < phrase.length; i++) {
alert (phrase.indexOf (phrase[i]));
}
与之前的结果相同,但这一次,您不是显示i
,而是检索phrase
中的当前元素,并使用indexOf()
获取已知的索引。
编辑:indexOf()
在这种情况下按预期工作,因为phrase
中的字母不同。但正如SamVK所说的那样let phrase = "banana";
,它无法正常工作,因为它总是会1
返回字母&#39; a&#39;所以你不能将它用于那种循环。
我没有使用let i = -1
,因为它不是phrase
的索引。如果indexOf()
找不到给定的元素,那么它就是import android.app.Application;
import android.content.Context;
public class MyApplication extends Application {
private static Context mContext;
public void onCreate() {
super.onCreate();
mContext = getApplicationContext();
}
public static Context getAppContext() {
return mContext;
}
}
返回的内容。
我希望它有所帮助。