• ベストアンサー

配列内の文字列検索をしたい

お世話になっております、また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(もしくは配列)内検索関数みたいなのがあればナイスなんですが…。分かる方、ご教授頂けたらこれ幸いです。

  • mahou
  • お礼率31% (10/32)

質問者が選んだベストアンサー

  • ベストアンサー
  • s_doc
  • ベストアンサー率24% (93/377)
回答No.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]);

mahou
質問者

お礼

連想配列はどうも苦手で、使ったこと無いんです。使いこなせたら便利なんでしょうね。やってみます。

その他の回答 (2)

  • yuuui
  • ベストアンサー率75% (3/4)
回答No.2

配列内検索関数は無いようですね…。んー。 じゃあこんなんでは?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.配列の要素数=見つかった位置となる 配列のどこかわかった後、その値を使いたい場合、前の方の回答の方が良いと思いますが、参考までに。

mahou
質問者

お礼

新たに配列を作ったほうが早いのか、全体ループのほうが早いのか…。なかなか分からない部分でありますね。まぁ、クライアント側なら重くしちゃっても良いかなとか考えてしまっるダメプログラマーです(笑)。 ありがとうございました。

回答No.1

こういうのはどうでしょうか。 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); }

mahou
質問者

お礼

返答が遅くなりすみません。 上記の方法は自分で普通にやっていた処理です(笑)。 でもこれが基本なんでしょうね。

関連するQ&A

  • 変数に指定文字列が含まれるときの処理

    ある変数$Exampleに"AABBCC"の文字列が含まれているとします。 if文で$ExampleにAAかCCが含まれるときの処理をひっかけたいのですが、 可能な関数はありますでしょうか。 ご存知の方、宜しくお願いします。

    • ベストアンサー
    • PHP
  • [Java]文字列分割

    「=」で区切られている文字を以下のように分割したいのですが、 うまいやり方が分からず困っています。ご教授ください。 例. aa=bb → aa と bb に分割 aa=bb=cc → aa と bb と cc に分割 "aa=bb"=cc → aa=bb と cc に分割 要は、囲い文字が「"」(無くても良い)、区切り文字「=」で、 囲い文字で括られた中の「=」は区切り文字とみなさない。 ということがしたいです。

  • 指定した文字数分の文字列を抽出し、検索(VBA)

    いつもお世話になっております。 指定した文字数分の文字列を抽出し、他のシートから抽出した文字列を検索して表示するのに セルBB2に =IF(AW2="",VLOOKUP(LEFT(N2,2),商品マスタ!$M$21:$N$67,2,0)) という数式を入れています。 セルBB2のみではなくBB列でずっと同じ処理をするため、マクロで処理しようと思うのですがなにぶん未熟でいい方法がわかりません。 Mid関数を使えばいいのかな、とは考えましたが、どう書けばいいのかわからず前にすすめません・・・・ どなたかご教授いただければ幸いです。

  • エクセルファイルのセル値に特定文字列を追加して別ファイルに

    VB2008でのプログラム方法についての相談です。以下の手順を実現したいです。 (1)エクセルファイルのあるセル中にあるデータを取得 例)A1セルの値"AA"、A2セルの値"BB"、A3セルの値"CC"..... (2)決まりきった特定文字列と(1)の値を結合 例)くっつけたい文字列 " "+AA ⇒ くっつけたい文字列"AA" くっつけたい文字列 " "+BB ⇒ くっつけたい文字列"BB" くっつけたい文字列 " "+CC ⇒ くっつけたい文字列"CC" (3)テキストファイルを生成 ○○○.txt 例) くっつけたい文字列"AA" くっつけたい文字列"BB" くっつけたい文字列"CC"

  • ある文字があるかどうかをジャバでやりたい

    aspでjavascriptを使って、文字列の中に自分が探している文字があるかを調べる関数がありましたらどうか教えて頂けないでしょうか? 例) iti = -1; var str = "あいうえお"; var iti = str.indexOf("う"); if (iti != -1) { str = str.replace("う", "ウ"); }

  • EXCEL文字列検索

    こんにちは。教えてください。 リスト内で文字列の検索をしたいです。 =IF(COUNTIF(B2,"*あああ*")>0,"あああ",IF(COUNTIF(B2,"*いいい*">0),"いいい","")) ”あああ”はうまくいくのですが、”いいい”は空白になります。COUNTIF関数は二つ以上ネストできないのでしょうか?? もう困っています。どうかお力を貸していただけませんか?よろしくお願いします。

  • Excel2003で他の列のデータをドロップダウンリストに

    質問のし直しです。 下記の場合、B列でのドロップダウンリストに(aa bb cc dd ee)と表示させるには、どうしたら良いのでしょうか? A列  B列 bb     dd aa     ee bb     ee cc    dd aa bb 実際には文字列なのですが、1300行で、A列のデータは300個位在ります。 宜しくお願い致します。

  • Cシェルでの文字列大小比較

    Cシェルで set AA="aa" set BB="bb" if( $AA > $BB )then echo "$AA > $BB" endif というような判定がしたいのですが、 上記の場合、”if: 条件式構文が正しくありません”というエラーが出力されます。 Cシェルの場合、文字列の比較は ifでイコールかノットイコールかは判定できますが、文字コードの大小比較が出来ないようですが、 文字列の大小比較をするにはどうすればよいのしょうか

  • 配列

    以下のコードの用に配列内に入っている要素をif文の「(array[i] == AA)」みたいに直接判定するのは不可能なのでしょうか?よろしくお願いいたします。 String[] array = {"AA","BB","CC"}; for(int i = 0;i < array.length;i++) {  if(array[i] == AA) //ここの部分

    • ベストアンサー
    • Java
  • Excelの文字列関数について

    Excelの文字列関数について こんにちは。Excel2007を使用しています。 先日、こちらで質問させていただいた【QNo.5785641】の続きになるのですが・・・ セルの中にある特定の文字が含まれている場合は、ある文字の後ろの数値を抽出したいという質問で、 例えば、セルA1に『AA-11 $100.00』、A2に『BB $ 95.00』と入力されている場合、『AAという文字が含まれている場合はB1に$マークの後ろの数値を抽出、BBという文字が含まれている場合はC1に$マークの後ろの数値を抽出する』というものを関数を使用して作りたいというものに対し、 =IF(COUNTIF(A1,"*AA*")=1,RIGHT(A1,LEN(A1)-FIND("$",A1)),"") =IF(COUNTIF(A1,"*BB*")=1,RIGHT(A1,LEN(A1)-FIND("$",A1)),"") という回答をいただきましたが、さらに追加で質問です。 例えば、セルA1に『AA-11 $100.00 aabbcc』、A2に『BB $ 95.00 abc』というように、抽出したい数値の後ろにも文字が入力されている場合はどのようにしたらよいのでしょうか? 宜しくお願いします。

専門家に質問してみよう