【Javascript】 連想配列
Javascriptでの連想配列の使い方を紹介します。初期化時にキーに変数の値を入れる、キー名を省略するなど、ちょっとした技術も合わせて紹介します。
目次
基本的な使い方
作り方
Javascriptでは連想配列は{}
で囲み、それぞれの要素をカンマで区切ります。空の連想配列を作りたい場合、{}
のみ書きます。
const a = { y: 20, x: 10, 1: 30, }; console.log(a);
{ '1': 30, y: 20, x: 10 }
それぞれの要素は、key: value
の形式で書きます。ここで、keyに文字列を使用する場合、ダブルクォーテーションは不要です。
また、Javascriptの連想配列はキーの順序は特に定まっていないことがわかります。
要素の取得
2通りあります。
const a = { x: 10, y: 20, 1: 30, }; console.log(a["x"]); console.log(a.y); // console.log(a.1); // SyntaxError: missing ) after argument list console.log(a[1]);
10 20 30
一つは、a[key]
のように、配列と同じような方法です。この場合、キーには式などあらゆる値が利用でき、文字列の場合はダブルクォーテーション等が必要です。
もう一つは、a.key
のように、ドットでアクセスする方法です。この場合、keyには文字列しか利用できませんが、ダブルクォーテーションが不要です。
要素の追加
存在しないキーを指定して代入すると、自動的に追加されます。
const a = {}; a.foo = 100; a["bar"] = 200; a[0] = 300; console.log(a);
{ '0': 300, foo: 100, bar: 200 }
要素の削除
delete
文を利用します。
const a = { x: 10, y: 20, 1: 30, }; delete a.x; console.log(a);
{ '1': 30, y: 20 }
delete 消す要素
で削除します。このとき、return文のような書き方をします。
初期化時のテクニック
キーに変数を使う
従来の方法では
const k = "foo"; const a = {}; a[k] = 100;
などの方法を取っていましたが、実は初期化時に変数の値を直接使うことができます。
const k = "foo"; const a = { [k]: 100 }; console.log(a)
{ foo: 100 }
のように、[var]
とすると、変数の値をキーにすることができます。
もちろん、a = {[x[0]]: 100}
のように配列の値なども利用できます。
キー名の省略
変数をValueに用いる場合、キー名を省略すると変数名がキー名になります。
const x = 10; const y = 20; const d = { x, y, z: 30 }; console.log(d);
{ x: 10, y: 20, z: 30 }
for文との合わせ
キーを配列で取得(keys)
Object.keys
で取得できます。
const a = { x: 10, y: 20, 1: 30, }; const keys = Object.keys(a); console.log(keys);
[ '1', 'x', 'y' ]
そのキーを使ってforEachするなどの手法もあります。
const a = { x: 10, y: 20, 1: 30, }; Object.keys(a).forEach((key) => { console.log(key); })
1 x y
値を配列で取得(values)
Object.values
で取得できます。
const a = { x: 10, y: 20, 1: 30, }; const values = Object.values(a); console.log(values);
[ 30, 10, 20 ]
この場合、キーは順番を保持しておらず、最初に入力した順番とは限らないという点に注意が必要です。
キーと値のセットを配列で取得(entries)
Object.entries
で取得できます。
const a = { x: 10, y: 20, 1: 30, }; const entries = Object.entries(a); console.log(entries);
[ [ '1', 30 ], [ 'x', 10 ], [ 'y', 20 ] ]
この状態にすれば、for-ofで列挙したり、filter、mapなどの配列用のメソッドが使えるようになります。
const a = { x: 10, y: 20, 1: 30, z: 20, }; const entries = Object.entries(a); const filterd = entries.filter((v) => v[1] == 20); const mapped1 = entries.map((v) => ( { [v[0]]: v[1] * 2 } )); const mapped2 = entries.map((v) => v[1] / 2); console.log(filterd); console.log(mapped1); console.log(mapped2);
[ [ 'y', 20 ], [ 'z', 20 ] ] [ { '1': 60 }, { x: 20 }, { y: 40 }, { z: 40 } ] [ 15, 5, 10, 10 ]
配列のfilterやmapなどは、下の記事を参照してください。
for-in
forでObject.〇〇
を使わずに列挙するには、for-inを利用します。for-ofは利用できません。
const a = { x: 10, y: 20, 1: 30, }; for (const key in a) { console.log(key); }
1 x y
型について
実は, Javascriptの連想配列は、連想配列という型ではなくObject型です。基本的に気にする必要はありません。
const a = {x: 20}; console.log(typeof a); console.log(a.toString());
object [object Object]
キーがあるか調べる
in
句を用います。
const a = { x: 10, hoge: 20, } console.log("x" in a); console.log("hige" in a);
true false
まとめ
連想配列の宣言や、関連するObjectの機能を紹介しました。Javascriptの連想配列はあまり機能が多くないため、配列に直して使うことがそこそこあります。
Object.keys
やObject.entries
など、配列に変形する方法を知っておくと便利です。
