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

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

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

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

Q&A

解決済

1回答

992閲覧

多次元連想配列で指定のキーの値のみを取得する方法

seiseik

総合スコア2

JavaScript

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

0グッド

0クリップ

投稿2021/11/21 10:05

下記の連想配列の例で指定したキーの値のみを取得する方法が分からず困っております。

JSON

1{ 2 "templateId": 123, 3 "groupName": "group1", 4 "infoData": [ 5 { 6 "itemName": "yamada", 7 "flag": 2, 8 "displayName": "山田", 9 "children": [ 10 { 11 "secondaryItemName": "suzuki", 12 "secondaryflag": 0, 13 "secondaryDisplayName": "鈴木" 14 }, 15 { 16 "secondaryItemName": "sato", 17 "secondaryflag": 1, 18 "secondaryDisplayName": "佐藤" 19 } 20 ] 21 }, 22 ] 23}

例えば"secondaryItemName"の値のみを取得したい場合、下記のようにmapを使って取得しているのですが、上記くらいの連想配列であれば値の取得は大変ではないですが、項目や階層がもっと複雑なケースだとそれぞれの項目を取得するのが大変になるかと思います。

「指定したキーの値のみを取得する」もっと簡単な方法はないでしょうか?

JavaScript

1 const secondaryItemName= infoData.map((item) => 2 item.children 3 .map((item) => item.secondaryItemName) 4 );

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

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

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

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

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

m.ts10806

2021/11/21 10:50

階層が分かっている前提でしょうか。
seiseik

2021/11/21 13:02

階層は分かっていない前提ですね!
seiseik

2021/11/22 00:39

ご指摘いただきありがとうございます。 回答できておらず失礼しました。
guest

回答1

0

ベストアンサー

以下でいかがでしょうか

js

1function findProp(obj, key, out) { 2 var i, 3 proto = Object.prototype, 4 ts = proto.toString, 5 hasOwn = proto.hasOwnProperty.bind(obj); 6 7 if ('[object Array]' !== ts.call(out)) out = []; 8 9 for (i in obj) { 10 if (hasOwn(i)) { 11 if (i === key) { 12 out.push(obj[i]); 13 } else if ('[object Array]' === ts.call(obj[i]) || '[object Object]' === ts.call(obj[i])) { 14 findProp(obj[i], key, out); 15 } 16 } 17 } 18 19 return out; 20}

  

使い方

js

1const myObj = { 2 "templateId": 123, 3 "groupName": "group1", 4 "infoData": [ 5 { 6 "itemName": "yamada", 7 "flag": 2, 8 "displayName": "山田", 9 "children": [ 10 { 11 "secondaryItemName": "suzuki", 12 "secondaryflag": 0, 13 "secondaryDisplayName": "鈴木" 14 }, 15 { 16 "secondaryItemName": "sato", 17 "secondaryflag": 1, 18 "secondaryDisplayName": "佐藤" 19 } 20 ] 21 }, 22 ] 23} 24 25function test() { 26 console.log(findProp(myObj, "secondaryItemName")); 27 console.log(findProp(myObj, "secondaryflag")); 28}

参考: How to get the key value from nested object (stackoverflow)

投稿2021/11/21 10:38

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

seiseik

2021/11/21 13:09

回答ありがとうございます! 試してみたところ、想定通りの値を取得することができました。 ご教示いただきありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問