プロが教えるわが家の防犯対策術!

javascriptで、特定の文字を含む場合の要素の位置の取得方法がわかりません。
どうすればよいでしょうか?

例えば、
["abc", "def", "ghi"]
という配列があったとき、
"e"
が含まれているものを探したら、
1
が返ってくるようにしたいです。

現状、下記のように書きましたが上手くいきません。
function findIndexOfStr(array, str) {
for(i=0; i<array.length; i++){
array[i].indexOf(str);
}
}

こちらの問題です↓
https://codeprep.jp/books/105/chapters/1/section …

質問者からの補足コメント

  • 質問に不備があり申し訳ありません。回答ありがとうございます。

    もう少しだけ質問させてください。
    breakあたりから記載内容の理解がうまくできず、どういう意味でしょうか?

    私の理解としては、
    forとifでarrayの要素を1つずつindexOfで確かめていて、もし確かめれたらbreakすることで、iが特定、まではわかりました。
    ですが具体的には、①if分の書き方、②?の意味、③?以降が何を指しているのか、わかりません...

    ①については、下記のように記載しても同じ意味でしょうか?
    for(i=0; i<array.length; i++) {
    if(array[i].indexOf(str)>-1) {
    break;
    }
    return array.length<=i?null:i;
    }

    初学者であり検索力も低く申し訳ないのですが、ご教示いただけますと幸いです。

    No.1の回答に寄せられた補足コメントです。 補足日時:2021/04/10 15:28

A 回答 (1件)

こんにちは



問題は見られませんけれど・・・

String.indexOf の場合、検索文字列が最初に現れた文字位置を返します。(先頭文字は0)
https://developer.mozilla.org/ja/docs/Web/JavaSc …

存在しない場合は-1が返されるので、array[i].indexOf(str)が0より大きいかを判断する必要があるのでは?
また、ご提示の関数は戻り値を指定していないので、undefinedが返されることになります。

検索文字が見つからなかった場合にどうするのか説明がありませんが、例えば、
function findIndexOfStr(array, str) {
let i;
for(i=0; i<array.length; i++) if(array[i].indexOf(str)>-1) break;
return array.length<=i?null:i;
}
とでもしておけば、見つかった場合はそのindex値を、ない場合はnullが返されるようになります。
この回答への補足あり
    • good
    • 1
この回答へのお礼

以下のように整理し、自分なりに解釈できました。ありがとうございました。

function findIndexOfStr(array, str) {
for (i=0; i<array.length; i++) {
if (array[i].indexOf(str)>-1) {
return i;
break;
}
}
return -1;
}

お礼日時:2021/04/10 16:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!