- ベストアンサー
Javascript多次元配列の位置取得
- Javascript初心者のため、多次元配列の特定要素を含む配列の位置を取得する方法がわかりません。
- 具体的には、testArrayという多次元配列において、bloodの値が「ab」である配列要素が何番目かを知りたいです。
- 単純なindexOfメソッドでは調べることができず、他の方法を教えていただけないでしょうか。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
JavaScript素人ですが。 多次元配列と言うより「多次元連想配列」ですね。 indexOf()は文字列に対する操作なので、配列には使えません。たぶん。 素人なりに考えて、データ配列を変えないとするなら、 ----------------------------- function getRecNum(objArray,key,data){ var Val1; for(i = 0;i < objArray.length;i++){ for(key in objArray[i]){ if(objArray[i][key] == data) Val1 = i; } } return Val1; } alert(getRecNum(testArray,'blood','ab')); ------------------------------ で、どう? ただこれだと、同じ値(上の例だと同じ血液型)のレコードが複数あったら、最後のレコードしか取得できないから、戻り値を配列にして・・・ ------------------------------ function getRecNum(objArray,key,data){ var Val1 = new Array(); var j = 0; for(i = 0;i < objArray.length;i++){ for(key in objArray[i]){ if(objArray[i][key] == data){ Val1[j] = i; j++; } } } return Val1; } var RecArray = getRecNum(testArray,'blood','ab'); var str0 = ''; //該当するレコード番号を列挙 for(i = 0;i < RecArray.length;i++){ str0 += RecArray[i]+'\n'; } if(str0 == '') str0 = 'not found'; //←ついでに該当レコード無しの時の表示も入れてみた。 alert(str0); ------------------------------ で、どうよ。 ※添付画像は”ab”の値を複数作って実行した結果。
その他の回答 (1)
- babu_baboo
- ベストアンサー率51% (268/525)
わたしも、JavaScript素人ですが。 配列の中のオブジェクトのプロパティが、"blood"だと判っているのに、走査するのは無駄だと思います。 なので、そもそもそれは多次元配列ではないのでは? n番目という値を取得しても、その処理の後、n番目のオブジェクトを操作するのでしょうから、番号を返すのではなく、対象のオブジェクトを(配列で)返すようにすると便利なのでは? -- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/String/indexOf
お礼
babu_babooさま ご回答、ご意見ありがとうございます。 ArrayとStringのindexOfについてはとても参考になりました。 > n番目という値を取得しても、その処理の後、n番目のオブジェクトを操作するのでしょうから、番号を返すのではなく、対象のオブジェクトを(配列で)返すようにすると便利なのでは? このあたりはまさにそうなので、 ご意見参考に考えてみます。 取り急ぎお礼までとなりますが、ありがとうございました。
お礼
Kaneyan-Rさま 回答ありがとうございます。 回答頂いた内容でやりたかったことができました! (同じ値が複数あるバージョンまで想定いただき、大変助かりました。) 取り急ぎお礼までとなります。 ありがとうございました。