Mapオブジェクトを学んでいますが、よくわかりません。
let m = new Map(); m.set('one','un'); m.set('two','duex'); m.set('three', 'trois'); console.log(m[0]); console.log(m['one']); console.log(m.one);
上記のconsole.log
の結果は全てundefined
になります。
上記の記述でインスタンスmは「キーがone、値がun」、「キーがtwo、値がduex」、「キーがthree、値がtrois」の3つの要素を持った連想配列になっていると思っていましたが違うのでしょうか(console.log(m[0])
も試したのははconsole.logでmの中身を確認してなんとなく当たりをつけてみただけです)。
テキストにはMapオブジェクトはオブジェクトリテラルではないと解釈できるようなことが書かれているので、それが原因なのでしょうか。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
上記の記述でインスタンスmは「キーがone、値がun」、「キーがtwo、値がduex」、「キーがthree、値がtrois」の3つの要素を持った連想配列になっていると思っていましたが違うのでしょうか
いえ、「キーに対して値を保持できるもの」という機能性を考えれば、Map
は連想配列です。ただし、アクセス方法はget
やset
などのメソッドを使う必要があります。
むしろ、普段使っているオブジェクトリテラルのほうが、「キーとして文字列かSymbol
しか使えない」「一部のObject
で予約されたキーで、妙な挙動を示す」など、連想配列としては不完全です。
投稿2019/09/15 02:13
総合スコア145977
0
ベストアンサー
Mapの中身は
Map { 'one' => 'un', 'two' => 'duex', 'three' => 'trois' }
となっていて
一般的に言われる連想配列(Object)とは違う形なのでMapは正確には連想配列とは言えないと思います
調べてみたところでは
プログラミングにおける単純な配列は、特定のアドレスからのオフセット(ずれ)をインデックスとして、アドレスとオフセットによって目的の値を得る。これに対し連想配列では、要素とそれを紐付けできるような値(キーと呼ぶ)のペアで表され、キーによって目的の値を求める。辞書やディクショナリという呼び方は、要素を本文、キーを見出しになぞらえたものと言える。ハッシュという呼び名はハッシュテーブルによって実装されることによる。(Wikipedia)
とWikipediaの定義の考え方だとMapは連想配列と呼んで間違いは無いのではとも考えられます
なので一般的に思い浮かべる連想配列をObjectと呼びMapと差別化をするという形が適切なのかなと考えました
Mapからの値の取得は
js
1m.get('one'); // un
このように行います
投稿2019/09/15 00:05
編集2019/09/15 06:23総合スコア759
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/15 05:42
2019/09/15 05:46
2019/09/15 05:51
2019/09/15 06:01
2019/09/15 06:03
2019/09/15 06:04
2019/09/15 06:21
2019/09/15 06:22
2019/09/15 06:23
2019/09/15 06:35
2019/09/16 03:25
2019/09/16 03:26
2019/09/16 03:36
2019/09/17 08:56 編集
2019/09/18 20:35
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/15 02:21 編集
退会済みユーザー
2019/09/15 06:35
2019/09/15 15:06
2019/09/16 03:01