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

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

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

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

Q&A

解決済

2回答

7776閲覧

3次元の連想配列の要素数を取得するには

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

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

0グッド

1クリップ

投稿2017/07/28 02:27

###前提・実現したいこと
3次元の連想配列の要素数をそれぞれの次元で取得するにはどうすれば良いでしょうか?
1次元目はalert( "1次元目=" + Object.keys(data).length );でうまくいきましたが
2次元目と3次元目の要素数の取得方法がわかりません。

下記のような形でalert表示させたいです。

1次元目=2
2次元目=4,3
3次元目=2,2,2,2,2,2,2

下記に自分なりに書いたソースを載せます。

###該当のソースコード

var data = { "食べ物": { 'フルーツ':{"単価": 100,"個数": 3}, '野菜':{"単価": 200,"個数": 5}, '肉':{"単価": 50,"個数": 10}, '魚':{"単価": 200,"個数": 2} }, "文房具": { 'はさみ':{"単価": 100,"個数": 3}, 'テープ':{"単価": 200,"個数": 5}, 'のり':{"単価": 50,"個数": 10}, } }; alert( "一次元目=" + Object.keys(data).length ) ;

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

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

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

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

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

guest

回答2

0

再帰を使ったら出来ます。
とおもってちょっと自身で試したくなったついでにできたソースはっつけておきます
(さくっと作ったのでコードの美しさなどなどはご了承w)

function saiki(obj, deep) { var arr = []; var buf = ""; if(obj instanceof Array) { obj.forEach(function(val, i) { if(val instanceof Object) { buf += Object.keys(val).length + ","; Object.keys(val).forEach(function(key, idx) { arr.push(val[key]); }); } }); } else if(obj instanceof Object) { buf = Object.keys(obj).length; Object.keys(obj).forEach(function(key, idx) { arr.push(obj[key]); }); } else { return; } if(buf == "") { return; } alert( deep + "次元目=" + buf ); if(Object.keys(arr).length > 0) { saiki(arr, deep + 1); } } var data = { "食べ物": { 'フルーツ':{"単価": 100,"個数": 3}, '野菜':{"単価": 200,"個数": 5}, '肉':{"単価": 50,"個数": 10}, '魚':{"単価": 200,"個数": 2} }, "文房具": { 'はさみ':{"単価": 100,"個数": 3}, 'テープ':{"単価": 200,"個数": 5}, 'のり':{"単価": 50,"個数": 10}, } }; saiki(data, 1);

投稿2017/07/28 03:50

rururu3

総合スコア5545

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

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

退会済みユーザー

退会済みユーザー

2017/07/28 08:07

ご回答ありがとうございます。
guest

0

ベストアンサー

javascript

1var data = { 2 "食べ物": { 3 'フルーツ':{"単価": 100,"個数": 3}, 4 '野菜':{"単価": 200,"個数": 5}, 5 '肉':{"単価": 50,"個数": 10}, 6 '魚':{"単価": 200,"個数": 2} 7 }, 8 "文房具": { 9 'はさみ':{"単価": 100,"個数": 3}, 10 'テープ':{"単価": 200,"個数": 5}, 11 'のり':{"単価": 50,"個数": 10}, 12 } 13}; 14alert( "一次元目=" + Object.keys(data).length ) ; 15alert( "二次元目=" + Object.keys(data).map(e1=>Object.keys(data[e1]).length) ) ; 16alert( "三次元目=" + Object.keys(data).map(e1=>Object.keys(data[e1]).map(e2=>Object.keys(data[e1][e2]).length)) ) ; 17//[].concat(...Object.keys(data).map(e1=>Object.keys(data[e1]).map(e2=>Object.keys(data[e1][e2]).length))):

投稿2017/07/28 03:51

Lhankor_Mhy

総合スコア36076

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

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

退会済みユーザー

退会済みユーザー

2017/07/28 08:07

ご回答ありがとうございます。希望の動作が実現しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問