如何在JavaScript中按索引打印所有字符?

时间:2017-10-29 14:12:13

标签: javascript

只是为了使用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()来了解这种语法非常重要。

5 个答案:

答案 0 :(得分:1)

不要使用indexOf。您可以使用此方法获取字符串中某个字符的位置(索引):

字符串具有length属性,可以迭代:

&#13;
&#13;
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;
&#13;
&#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 }

事实上,这就是你想要的。

这意味着:

  • 从我开始为0(i = 0
  • 做我体内的任何事情(// ...some code
  • 将我增加1(i++
  • 重复,直到i等于someVariable(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,你可以这样做:

&#13;
&#13;
let phrase = "ab";

Array.from(phrase).forEach(char => {
  console.log(phrase.indexOf(char))
})
&#13;
&#13;
&#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; } } 返回的内容。

我希望它有所帮助。