質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

2回答

15327閲覧

連想配列で、特定の文字列が含まれる値だけ取り出したい

one__nne

総合スコア8

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2016/12/14 13:21

お世話になります。

連想配列で、特定の文字列が含まれる値だけ取り出したいです。
例えば、

{id:3542,place:'赤坂'}; {id:8293,place:'青山'} {id:2581,place:'目黒'} ・ ・ ・

のようなオブジェクトがあったとして、
placeの値に「赤」が含まれる場合のみ変数に配列として格納し、HTMLなどに出力したいのですが、どのようにすればいいでしょうか?

キーを取り出すものは検索すると結構出てくるのですが、値を検索するやり方がなかったので質問させていただきました。

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

連想配列が例えばobjという変数だったとして、そこから値を取り出すには以下のようにします。

javascript

1var obj = {id:3542,place:'赤坂'}; 2obj.place //赤坂

文字列str内に特定文字があるかを調べるにはString.indexOfメソッドを使います。

var str = '赤坂' str.indexOf('赤'); //もしstr内に赤がある場合は赤の出現する文字位置、なければ-1が返る。この場合は0が返る

indexOfの返り値が-1であればその文字は含まれていないということです。逆に-1以外なら引数に指定した文字が含まれるということ。indexOfの返り値が-1以外なら処理をするような条件式を作りましょう。

とりあえずここまで伝えればあとは何とかなるでしょう。頑張ってください。

投稿2016/12/14 13:29

編集2016/12/14 13:33
hitsujimeeee

総合スコア486

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

配列の中に入れてあげるとかんたんに取り出せます。

JavaScript

1var obj = [ 2 {id:3542,place:'赤坂'}, 3 {id:8293,place:'青山'}, 4 {id:2581,place:'目黒'} 5]; 6 7var matched = obj.filter(function(obj) { 8 return obj.place.match(//); 9});

投稿2016/12/14 13:42

mukkun

総合スコア882

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

lazex

2016/12/14 13:53

正規表現使うなら return /赤/.test(obj.place) のほうがいいです また 古いブラウザに対応させる必要ないなら return obj.place.includes("赤") のほうがいいです パフォーマンス的に
mukkun

2016/12/14 14:01

lazexさん > return obj.place.includes("赤") おお。もうmatchは古いんですね。 includesのほうがスッキリしておりカッチョいいですね。 ありがとうございます。 > /赤/.test(obj.place) こっちは書き方があんまり好きじゃないかなぁ。。
lazex

2016/12/14 14:07 編集

match はマッチした値を返り値用に保存するので、あるかないかの判断だと true/false が返ってくる test のほうがパフォーマンスを考えるならいいです まぁかなりの回数繰り返し実行しなければ気にならない程度ですし、書き方が好きじゃないのは同意です
mukkun

2016/12/14 14:53

色々、今後もjavascriptさんには頑張って欲しい所ですね。
yambejp

2016/12/15 00:38

正規表現するときも文字列で渡すことを意識して return obj.place.match(new RegExp('赤')); としたほうが汎用性があがるかもしれません インスタンスをつくっておけば、再利用も可能です 正規表現は単に「含む」ものを探すというよりは、 先頭や末尾にあるとか前後関係がどうとか複数回出現するとか 複雑な検索をするためのものなので場合によって使い分けるとよいかと なお、含まれるのを表現は昔からこうするのが一般的です return obj.place.indexOf('赤')>=0;
mukkun

2016/12/15 02:29 編集

yambejpさん 正規表現の使い方は言語によってマチマチですね。 javascriptでこういったケースの時は使わない方がよいのかもしれませんね。 (lazexさんが記載されてるとおりパフォーマンス影響) 確かに正規表現より遙か高速ですが、 indexOfで文字列検索するのもあんまり好きじゃないんですよね。。 ケースバイケースかと思いますが、みなさん性能重視なんでしょうか。
hitsujimeeee

2016/12/15 03:28

mukutaJapさん >ケースバイケースかと思いますが、みなさん性能重視なんでしょうか。 正規表現は初心者の方にとって難しいイメージがあるので、自分はプログラミング初心者の方にはあまり勧めないですね。 > return obj.place.includes("赤") includesなんてものがあったのを初めて知りました。今後使っていこうと思います。
mukkun

2016/12/15 04:21

hitsujimeeeeさん いいことなんですが、 言語のアップデート情報を監視しておかないと、いつか取り残されてしまいますね。。 特にJavaScriptは近年まるっと仕様が変わりそうな感じがします。 (純正JavaScript使いづらい。。)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問