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

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

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

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

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

1回答

259閲覧

連想配列[{A:'a',D:'d'},{B:'b',E:'e'},{C:'c',F:'f'}]のlengthの取得方。

MOTOMUR

総合スコア195

JavaScript

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

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2018/03/02 04:20

編集2018/03/02 04:36

確認のための質問です。(stateの配列とします。)

普通の配列では(  Item=['a','b','c']  )

this.state.Item.length

で取り出せますよね?

また、連想配列では、(  Item=[A:'a',B:'b',C:'c']  )

Object.keys(this.state.Item).length

で取り出せるという記事を見ました。

では、タイトルの、(  Item=[{A:'a',D:'d'},{B:'b',E:'e'},{C:'c',F:'f'}] )

の場合、{}の数を取得するのは、先ほどと同じように

Object.keys(this.state.Item).length

としたら取得できるのでしょうか?

また、
{}のなかの要素の長さを取得するとき、

//key=0,1,2として Object.keys(this.state.Item[key]).length

というようにしたら良いのでしょうか?

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

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

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

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

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

guest

回答1

0

ベストアンサー

Item=[{A:a,D:d},{B:b,E:e},{C:c,F:f}]

この場合まずa~fが変数として機能しているので、いきなり書くとエラーになります
その上、普通にItemはただの配列ですから普通にlengthを持っています
中身はforEachで回してObjecy.keysを数えて下さい

javascript

1Item=[{A:"a",D:"d"},{B:"b",E:"e"},{C:"c",F:"f"}]; 2console.log(Item.length); 3 4Item.forEach(function(x){ 5console.log(Object.keys(x).length); 6});

投稿2018/03/02 04:25

yambejp

総合スコア114814

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

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

MOTOMUR

2018/03/02 04:35 編集

回答ありがとうございます! 小文字に' 'をつけ忘れていました。修正します。 深い理解のために質問させてください! []内に、name:' a ' や Item:{ A:' a ' } なるものが複数ある場合(0~の数字でなく文字列がkeyの場合)は連想配列であり、 []内に、 ’ a ’ もしくは { A:' a ' }のようになっている場合(keyが0〜の数字)は配列であるということでしょうか ネストが深い部分もこの解釈で良いのですかね?? また、質問文の Item=[{A:"a",D:"d"},{B:"b",E:"e"},{C:"c",F:"f"}]; の{}内部の件についてですが、 例えばforEachで取得できず、 このような場合、 Outer:[0,1,2] this.state.Outer.map( key =>{ Object.keys(this.state.Item[key]).length } ) には、forEachのやり方ではできないかと思いますが、どのようにやったら良いでしょうか??
yambejp

2018/03/02 04:46

> []内に、name:' a ' や Item:{ A:' a ' } なるものが複数ある場合(0~の数字でなく文字列がkeyの場合)は連想配列であり、 うーんちょっと勘違いされていると思いますが javascriptは[]はあくまでも配列で、連想配列にするにはオブジェクトである{}を利用します。 console.log([name:"a"])のような書き方はできません 一方Object.keysは連想配列からキーを取り出す処理なので Object.keys({A:"a",D:"d"}とすれば配列["A","D"]が戻ってくるので そのlengthを拾えば連想配列の要素数になります
MOTOMUR

2018/03/02 04:50

なるほど、ありがとうございます。 this.state.Item[0]は{ A:"a",D:"d" }なので、 Object.keys(this.state.Item[key]).lengthはできる。ということですね!
yambejp

2018/03/02 04:56

ちなみに連想配列はプロパティの列挙に制限がかけられます var x={A:"a",B:"b",C:"c"}; Object.defineProperty(x,"B",{enumerable:false}); console.log(Object.keys(x)); //戻り:AとC console.log(x["B"]); //戻り:b Object.keysで拾えるのはあくまでも列挙できるプロパティです しかし列挙できなくても参照はできます。 そのあたりを理解しないと要素数について理解が深まらないと思います
MOTOMUR

2018/03/02 05:04

なるほど、そんな違いがあるのですね。もう少し勉強してみようと思います。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問