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

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

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

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

Q&A

解決済

4回答

55787閲覧

連想配列の値からキーを取得する方法はありませんか?

buibui80

総合スコア1033

JavaScript

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

1グッド

2クリップ

投稿2015/07/29 13:09

javascript

1// 連想配列 2var obj = { 3 a1: 'asd', 4 a2: 'sdf', 5 a3: 'dfg', 6 a4: 'fgh' 7}; 8 9// 連想配列で検索する値 10var searchValue = 'sdf';

上記の searchValue からキー「a2」を取得する方法はないでしょうか?
以下しか思いつかなかったのですが、もっと簡単で良い方法がありましたらご教授願います。

javascript

1var key = null; 2var keys = Object.keys(obj); 3for(var i=0; i<keys.length; i++) 4{ 5 if (searchValue === obj[keys[i]]) 6 { 7 key = keys[i]; 8 } 9}
tozjp👍を押しています

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

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

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

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

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

guest

回答4

0

ベストアンサー

reduce でこんな感じとか。

javascript

1var result = Object.keys(obj).reduce(function(r, k) { return obj[k] == searchValue ? k : r }, null); 2// 結果なしの場合は null

filter でこんな感じとか。

javascript

1var result = Object.keys(obj).filter(function(k) { return obj[k] == searchValue })[0]; 2// 結果なしの場合は undefined

投稿2015/07/29 14:43

ngyuki

総合スコア4514

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

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

buibui80

2015/07/29 15:48

filterはmapと違い、成否を返し、その要素で新しい配列になると。 reduceも面白いですね。 ありがとうございました。
guest

0

lang

1var result = Object.keys(obj).map(function(key) { return obj[key] === searchValue ? key : ''; }).join(''); 2console.log(result); // => a2 3// (結果なしの場合は空文字)

1行で書いてしまいましたが、検索処理をする関数として名前をつけてあげたり、map に渡す関数に名前をつけてあげると、多少複雑な処理になっても読みやすさを保てるかもしれません

詳細については、リンク先を参照してみてください

Links

投稿2015/07/29 13:41

gouf

総合スコア2321

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

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

buibui80

2015/07/29 15:44 編集

map良いですね。 該当したら値を返して最後に配列になると。 しかも値を書き換えることができるとは。 ありがとうございました。
guest

0

参考情報:

...
Object.keys(オブジェクト名)はそのオブジェクトのキーの名前が配列で返されるので、オブジェクトをループで回す時にも使えそうです。
...

投稿2015/07/29 13:41

katoy

総合スコア22324

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

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

buibui80

2015/07/29 15:37

URL確認しましたが質問の趣旨とは違ったようです。
guest

0

javascript

1for (key in obj) { 2 if (obj[key] == searchValue) { 3 var searchKey = key; 4 break; 5 } 6}

…とか…。。

投稿2015/07/29 13:15

yu-ri

総合スコア634

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

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

buibui80

2015/07/29 13:34

コーディング量が減るので良いですね。 ですが、もっと簡単な方法があると最高です!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問