teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

問題の発生原因を追記

2021/06/17 04:20

投稿

hallen0225
hallen0225

スコア587

answer CHANGED
@@ -1,8 +1,17 @@
1
- 「文字列HelloWorld」から「HelloWorld」を見つける
1
+ - 「文字列HelloWorld」から「HelloWorld」を見つける
2
- 見つかった「HelloWorld」のそれぞれの文字が、「文字列HelloWorld」の何文字目にあるか表示する(「HelloWorld」の順番通り)
2
+ - 見つかった「HelloWorld」のそれぞれの文字が、「文字列HelloWorld」の何文字目にあるか表示する(「HelloWorld」の順番通り)
3
3
 
4
4
  ということをしたいのだと想定して回答いたします。
5
5
 
6
+ 重複している文字の番号が一緒になってしまう原因としては、indexOfメソッドが、一番左の文字から一文字ずつ順番に見て行って、「一番最初に見つかった場所の番号(インデックス)を返す」からです。
7
+ "Hello World"の中に、"l"は2つあって、1つ目は3文字目、2つ目は4文字目ですが、indexOfメソッドでは一番最初の"l"の場所が返ってくるので、何度実行しても結果は変わらないわけですね。
8
+
9
+ 今回は、
10
+ - まず「HelloWorld」という文字列が含まれる場所を探す
11
+ - その最初の文字の番号に1ずつ足していけば、全ての文字の番号が分かる
12
+
13
+ ことを利用して作ってみました。
14
+
6
15
  ```Javascript
7
16
  let string = "文字列HelloWorld";
8
17
  let pattern = "HelloWorld";