次javascriptの連想配列またはマップ連想配列とはjavascriptの連想配列は、一般の配列が格納位置を示すのに数値を使うのに対して、文字列を使うようにしたものと捉えることができます。仕組みとしてはオブジェクトのプロパティを使って文字列と格納された値を対応付けるものなので、別のものです。配列は「ビルトインオブジェクト」の「Array」に書かれていますが、そこに連想配列の説明はありません。「式と演算子」の「プロパティへのアクセス」に書かれています。table)とみなすことができます。」と書いてあり、じゃぁ連想配列は本当はオブジェクトと呼ぶべきかというと、Arrayだってオブジェクトですから区別がつきません。オブジェクトという言葉は対象を曖昧にしてしまいますので、ここでは連想配列で行きます。マップというデータ構造がECMAScrpt2015から導入されたとあるので、ゆくゆくはそちらに移行するのだろうと思います。配列の格納位置を示す番号は「インデックス」「添字」などと呼ばれ、それを使って参照するものは「値」と呼ばれます。連想配列の場合はプロパティを意識すると「(プロパティの)名前」と「(プロパティの)値」となり、他の言語からの類推でマップと意識すると「キー(key)」と「値(value)」と呼ばれます。valueはメソッド名や関数名で出てくるのでよく使われます。["mike","tama","kuro"];連想配列。{'apple':'りんご','orange':'みかん','peach':'もも'};名前(キー)と値をコロンで区切って列挙します。なくても受け入れられます。必要です([apple]だとappleという変数の値を使おうとします)。fruits.orangeはドット演算子での参照で角括弧[]とほぼ同様に使えます。[]で参照できるのは共通ですが、配列名だけでは内容を列挙してくれないし、lengthも使えないなどかなり差があります。連想配列の作り方とタイプ配列には3つの作り方がありました。連想配列も同様と思ったのですが、初期値を入れた状態で作れませんでした。配列はarray,連想配列はObjectと宣言します。配列の発展として連想配列を捉えていたのですが、かなり異なるものでした。他の言語の事情と混同していたようです。そこで、配列と連想配列で変数のタイプとしての違いがあるかも調べると予想に反してみんなObjectでした。普通の配列と同様に値の方には様々な型の変数やオブジェクトを格納できます。キーの方には文字列を使います。文字列以外(たとえば数値)を使っても文字列として扱われます。確認することができます。要素ごとに異なるタイプの値を入れることができるのは、ちょっと驚きです。キーの型キーは文字列として扱われます。'で囲んだのと同様の扱いを受けるということを示します。その文字列が変数名であったときにも関係がないことを示します。していて、'white'をキーにするつもりでshiroを指定してもキーは'shiro'になるということです。参照で[変数名]とすると変数に格納されて値を文字列に変換してそれをキーにして値を探します。'white'はないので出てはきません(ブラウザによってはundefinedになります)。3もキーにして'three'を格納しているので、sanでも'3'でも'three'が参照できます。⇨キーの一覧を取得すると(Object.keys(iroiros))、3だけ前に出てきます。一般的に「キー:値」の順序は格納順になるとは限らないので、それほど驚くことではありませんが、文字列の方は格納順に見えます。キーの型は3を含めてすべて文字列です。これについて、要素の追加の場合の振る舞いについての発展、ECMAScrpt2015から導入されたマップとの違いの発展もあります。生成の時に要素が空であれば、要素数0の連想配列ができます。{};キーと値の組であれば、後から追加したり削除したりは普通のことと考えられます。]を使って配列と同様に要素を追加できます。連想配列と呼ばれる理由です。]keyvalue結果から、次の事柄が確認できます。]に文字列でなく変数を書くと変数の値がキーとして使われること。この他の書き方もあります。次の2つは同じ連想配列を作ります。角括弧の代わりにドット記法を使います。オブジェクトと見るとこちらのほうが自然です。ドットの後ろには変数を書くことができません。プロパティ名の扱いになりますから、数字で始まったり、途中にスペースがあったりする場合はドット記法は使えません。角括弧を使うことになります。書き方value繰り返し機構(1)for文でindexを使ってすべての要素にアクセスするのは配列の基本ですが、連想配列ではindexがないので使えません。Object.keys(fruits)keyが全て英字ならば平和なのですが、あえて数字を入れてkeyの順序が登録順とは限らないことを示します。下の数字の15は登録は文字列として登録されますから不正ではありません。英字文字列部分を見ると文字コード順になっているわけではないようです。蛇足)この項は蛇足です。(1)は、どちらもまずkeyを取得しそれを使ってvalueを参照します。これで十分ですが、valueを直接得る方法もあるとバランスがとれます。ありますが、これは連想配列には使えません。いうエラーになります。iterableなオブジェクトとは、ArrayやMap,Setなどをいいます。使いたければ連想配列でなくMapを使えということです。2015の規格からですからまだ使えない環境が残っているかもしれません。連想配列ではエラーになります。Object.keysに対してはObject.valuesがあります。keyとvalueがセットで得られる、Object.entriesがあります。2017の規格からですから使えない環境があります。使えるかどうかは、それぞれ確認してください。}}ここでは、try-catchを使ってエラーを表示しています。オブジェクトであるArrayに対して使ってみようということで追加です。不連続な番号をあえて使うようなことをしなければ、keyは連番が返るだけですし、Object.valuesは元の配列と同じものが得られるだけですから、ほとんど意味のないことをしています。オブジェクトですが、一文字目がkey,二番目がvalueになっています。そもそもマップの解説にあったものを使ってみたものです。以外は当たり前の結果なので、もうひとついたずらをしてみました。配列もオブジェクトなのでプロパティを追加できます。異なる結果になります。Object.*では数値も文字列のkeyと全く区別なく取り扱われています。}}ここでは、try-catchを使ってエラーを表示しています。新機能に対応していないブラウザでエラーになる場合があります。連想配列に出会ったのは1993年のことでした。UNIX上のawkでした。次のような名前と数値が組になったデータから、名前ごとの合計を出すというものです。98こんな感じでできてしまいます。$1がキー、$2が値でキーが同じ場所に値を加算するものです。awkではファイルから読み込みますが、html経由で使うjavascriptではそうは行きません。DOMを使ってページから読むのでは文字列から数値への変換が必要になりちょっと面倒です。ここでは[key,value]の配列の配列を作っておき、そこからスタートします。キーを参照したときに、undefinedになるので、その対策が必要な分感激は薄れます。当時は普段使用できる言語はBASICぐらいしかなく、名前の配列と合計の配列をそれぞれ作って新出の名前を登録しながら合計に数値を足していく必要がありました。その配列も値を探す関数(indexOf()のような)とか要素数の追加のできないものでしたから、awkは革命的に見えました。連想配列では順序の固定が保証されないので単なる追加と削除になります。fruits.orange;もともと存在しないキーを指定しても無視されるだけです。次の例では表のセルから文字列を読んで連想配列に格納し、それからdeleteして次のセルに書き出すという操作をしています。読み書きをする時の例外処理で複雑になっているのですが、delete部分が極端に単純で例外処理がいらない分、他の部分に手を掛けてみました。keyの存在を確認できます。ここでは不要なのですが使ってみました。historyは操作回数(1が初期状態)。ptrは次に書き出すセル番号。1つの空文字列をからなる配列を返します。この仕様に合わせた設計をしています。書き出しが複雑なのは最後に","を付けないためのものです。表の見た目のわかりやすさと、プログラムのわかりやすさの折り合いは非妙な所があります。存在を確認する必要はありません。5回まで削除操作ができます。ないものを指定しても無視されます。マップは今は略します最近のバージョンではマップという構造が使えるようになっています。javascriptは閲覧者の使っているブラウザにより新しい仕様に対応していないことがあります。作成者側でバージョンを管理できないので、共通な仕様で書かなければなりません。Mapが使われる様になるかもしれない。fruits.[key2];安達順一(2018-10-08)https://dabiyone.com/。