- ベストアンサー
配列内の文字列検索をしたい
お世話になっております、またjavascriptで詰まってしました。現在作ってるソースは以下のイメージです。 var temp= hensuu; var list = "aa,bb,cc"; //tempがaa,bb,ccの文字を含んでいたら処理 if(list.indexOf(temp)!=-1){ //ここで何番目の要素か知りたい } という処理をしているのですがif(list.indexOf(temp)!=-1)の中で「文字列(list)に存在する」だけでなく,「区切りの何番目の要素か」も知りたいんですがそういう便利な関数か方法はあるでしょうか? list.indexOf(temp)の返す値は「文字列が見つかった場所」なのでリストの順番ではないんですよね…。 for文でひとつひとつ回すしか方法は無いのでしょうか??LIST(もしくは配列)内検索関数みたいなのがあればナイスなんですが…。分かる方、ご教授頂けたらこれ幸いです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こういうのはどうですか。 連想配列を使った解です。 var temp= hensuu; var list = "aa,bb,cc"; var num2text = new Array(); // 数字→文字対応 var text2num = new Array(); // 文字→数字対応 num2text = list.split(","); for(var i=0; i<num2text.length; i++) text2num[num2text[i]] = i; // ここまでが初期設定。 alert(text2num[temp]);
その他の回答 (2)
- yuuui
- ベストアンサー率75% (3/4)
配列内検索関数は無いようですね…。んー。 じゃあこんなんでは?forは使わず(笑) var temp= hensuu; var list = "aa,bb,cc"; var point = list.indexOf(temp); //位置を取得 //tempがaa,bb,ccの文字を含んでいたら処理 if(point!=-1){ str = list.substring(0,point) //見つけた位置から後ろ削除 hairetu = new Array; //配列作成 hairetu = list.split(","); //,で区切って配列に入れる } alert(hairetu.length); 1.見つけた文字列位置から後を削除 2.残った文字列を「,」で切って配列に入れる 3.配列の要素数=見つかった位置となる 配列のどこかわかった後、その値を使いたい場合、前の方の回答の方が良いと思いますが、参考までに。
お礼
新たに配列を作ったほうが早いのか、全体ループのほうが早いのか…。なかなか分からない部分でありますね。まぁ、クライアント側なら重くしちゃっても良いかなとか考えてしまっるダメプログラマーです(笑)。 ありがとうございました。
- pentaro_2000
- ベストアンサー率23% (29/123)
こういうのはどうでしょうか。 function test(){ list = new Array(); list[0] = "あ"; list[1] = "い"; list[2] = "う"; for(i=0;i<list.length;i++){ if(list[i].indexOf("う") != -1){ var rs = i; } } alert(rs); }
お礼
返答が遅くなりすみません。 上記の方法は自分で普通にやっていた処理です(笑)。 でもこれが基本なんでしょうね。
お礼
連想配列はどうも苦手で、使ったこと無いんです。使いこなせたら便利なんでしょうね。やってみます。