以下のコードについて、お聞きしたいのですが、以下のquizSetは、配列の中に、オブジェクトが格納されている、多次元のオブジェクト連想配列であるとの認識で正しいでしょうか?
配列について、調べていたのですが、オブジェクトと連想配列とが若干混乱してしまった為、ご質問させて貰いました。
ご助言頂けましたら、幸いです。
const quizSet = [ {q: 'What is A?', c:['A0','A1','A2']}, {q: 'What is B?', c:['B0','B1','B2']}, {q: 'What is C?', c:['C0','C1','C2']}, ];
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
JavaScriptにある{}
はオブジェクトでそもそも「連想配列」という概念にはあたりません。
オブジェクトが「他の言語で言う連想配列のように使える」だけです。
- [オブジェクト初期化子
](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Object_initializer)
「構文」のところを参照
もっと言えば「配列」もオブジェクトです。
JavaScript の Array オブジェクトは、配列を構築するためのグローバルオブジェクトで、配列とは複数の要素の集合を格納管理するリスト構造です。
初期化は確かにこのように書かれることが多いです。
js
1let obj = {}; 2let arr = [];
ただこれはあくまでリテラルであり、丁寧に書くとこうなります。
js
1let obj = new Object(); 2let arr = new Array();
様々なオブジェクト指向言語で出てくるnewですね。
newはご存知かもしれませんが、オブジェクトをインスタンス化する演算子です。
オブジェクトなので、いわゆる連想配列の特徴である「添え字」とは呼びません。
プロパティです。
(いうなれば属性名と属性値のペアの集まりです)
js
1let obj = {}; 2obj.hoge = "a";//プロパティ
ただ、リテラルとしても記述が可能であるため、連想配列”のような”アクセスの仕方が可能となっているだけです。
js
1let obj = {}; 2obj.hoge = "a"; 3console.log(obj); //{ hoge: 'a' } 4console.log(obj.hoge); //a 5console.log(obj["hoge"]); //a
オブジェクトなので、メソッドも持てます。
js
1let obj = {}; 2obj.fnc = function(a){ 3 console.log(a); //b 4} 5obj.fnc("b");
ちなみに{}
のところを[]
にして確認してみても結果としては”ほぼ”同じです。
ObjectかArrayかの違いだけですね。
js
1let arr = []; 2arr.hoge = "a"; 3console.log(arr); //[ hoge: 'a' ] 4console.log(arr.hoge); //a 5console.log(arr["hoge"]); //a 6arr.fnc = function(a){ 7 console.log(a); //b 8} 9arr.fnc("b");
私自身もObjectとArrayの完全な使い分けができるほど使い込んでいるわけではありません。
どこかで拾ってきたような言葉を借りるようになりますが、私もおおよそ下記のように考えています
- 数値だけが順番にならんでいるようなデータならArrayが適切
- データをまとめて扱うならObjectが適切
- 表のように複数のレコードを扱うならArray+Object
蛇足:
ちなみに今回色々試していく中で「あ、こんなこともできたのか」と知ったことがあるのでついでに書いておきます。
PHP
1<?php 2$arr = []; 3$arr[] = function($a){ 4 echo $a; 5}; 6$arr[] = "v"; 7var_dump($arr); 8 9$arr[0]("b");
もはや「配列」って便宜上そう呼んでいるだけで
そもそもオブジェクトって「モノ」そのものなので
プログラミング言語上は正しくは「全てオブジェクト」ということなのかなと思いました
(あくまで今回検証した範囲で。私自身も知らない言語の方が多いので言語毎に概念や表現をドキュメントで確認する必要はあります)。
C言語もちゃんと勉強しようかなと思った今日この頃です。
投稿2019/08/21 01:02
編集2019/08/22 01:11総合スコア80850
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/08/21 01:06
2019/08/21 01:10
2019/08/21 01:12
2019/08/21 01:12
2019/08/21 01:14
2019/08/21 01:16
2019/08/21 01:22 編集
2019/08/21 01:33 編集
2019/08/21 01:36
2019/08/21 01:49 編集
2019/08/21 01:45
2019/08/21 02:35
2019/08/21 03:56
2019/08/21 11:43
2019/08/21 11:56
2019/08/21 12:01
2019/08/21 12:44
2019/08/21 12:56 編集
2019/08/21 13:13
2019/08/21 13:37
退会済みユーザー
2019/08/21 13:45
2019/08/21 14:03
退会済みユーザー
2019/08/22 00:03 編集
2019/08/22 00:05
2019/08/22 00:52
2019/08/22 00:58
2019/08/22 01:06
2019/08/22 01:19 編集
2019/08/22 01:23
2019/08/22 01:36
2019/08/22 01:44
2019/08/22 01:58 編集
2019/08/22 02:50
0
ベストアンサー
quizSetは、配列の中に、オブジェクトが格納されている、多次元のオブジェクト連想配列であるとの認識で正しいでしょうか?
いえ、命題のquizSetはオブジェクトが格納された単なる配列です
投稿2019/08/21 01:06
総合スコア114779
0
オブジェクトと連想配列とが若干混乱してしまった為、ご質問させて貰いました。
JavaScriptの場合、{ }
で書くようなオブジェクトリテラルは、連想配列としても利用可能です(ただし、オブジェクトであるためtoString
のような一部のキーが使えないなどの制約があります)。
投稿2019/08/21 01:01
総合スコア145183
0
配列の中に、オブジェクトが格納されている、多次元のオブジェクト連想配列であるとの認識で正しいでしょうか?
違います。
まずは配列と連想配列の違いを理解しましょう。
投稿2019/08/21 03:24
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。