web-dev-qa-db-ja.com

JavaScriptでハッシュまたは辞書オブジェクトを作成する方法

私はJavaScriptで地図オブジェクトを作成したいです。私は次のような考えに至りました。

 var a = new Array();
 a["key1"] = "value1";
 a["key2"] = "value2";

しかし、どのように私は特定のキーが存在するかどうかを見つけることができますか?

163
Saurabh Kumar

名前付きキーが必要な場合は配列を使用しないでください。プレーンオブジェクトを使用してください。

var a = {};
a["key1"] = "value1";
a["key2"] = "value2";

その後:

if ("key1" in a) {
   // something
} else {
   // something else 
}
266
Quentin

組み込みのMapタイプがJavaScriptで利用可能になりました。単にObjectを使用する代わりに使用できます。それはすべての主要なブラウザの現在のバージョンでサポートされています。

マップは、オブジェクトで使用される[subscript]表記をサポートしません。その構文はsubscript値を暗黙的にプリミティブ文字列またはシンボルにキャストします。マップは任意の値をキーとしてサポートするので、メソッド.get(key).set(key, value)、および.has(key)を使用する必要があります。

var m = new Map();
var key1 = 'key1';
var key2 = {};
var key3 = {};

m.set(key1, 'value1');
m.set(key2, 'value2');

console.assert(m.has(key2), "m should contain key2.");
console.assert(!m.has(key3), "m should not contain key3.");

値はプロパティとして格納されるため、オブジェクトはキーとしてプリミティブ文字列とシンボルのみをサポートします。 Objectを使用していた場合、key2key3を区別することはできません。それらの文字列表現は同じであるためです。

var o = new Object();
var key1 = 'key1';
var key2 = {};
var key3 = {};

o[key1] = 'value1';
o[key2] = 'value2';

console.assert(o.hasOwnProperty(key2), "o should contain key2.");
console.assert(!o.hasOwnProperty(key3), "o should not contain key3."); // Fails!

関連する

42
Jeremy

配列ではなくオブジェクトを作成したいのです。

そのようです、

var Map = {};

Map['key1'] = 'value1';
Map['key2'] = 'value2';

鍵が存在するかどうかは、さまざまな方法で確認できます。

Map.hasOwnProperty(key);
Map[key] != undefined // For illustration // Edit, remove null check
if (key in Map) ...
38
Robert

in演算子を使用します。 "key1" in a

1
Howard
if( a['desiredKey'] !== undefined )
{
   // it exists
}
0
KOGI