このJavaコードに相当するJavaScript/JQueryをどのようにして作成できますか。
Map map = new HashMap(); //Doesn't not have to be a hash map, any key/value map is fine
map.put(myKey1, myObj1);
map.put(myKey2, myObj2); //Repeat n times
function Object get(k) {
return map.get(k);
}
編集:時代遅れの答えは、ECMAScript 2015(ES6)標準のjavascriptは、地図の実装を持っています、詳細についてはここを読んで: https://developer.mozilla.org/en-US/docs/ウェブ/ JavaScript /リファレンス/ Global_Objects/Map
var map = new Object(); // or var map = {};
map[myKey1] = myObj1;
map[myKey2] = myObj2;
function get(k) {
return map[k];
}
//map[myKey1] == get(myKey1);
単純なオブジェクトを使うだけです:
var map = { key1: "value1", key2: "value2" }
function get(k){
return map[k];
}
function Map() {
this.keys = new Array();
this.data = new Object();
this.put = function (key, value) {
if (this.data[key] == null) {
this.keys.Push(key);
}
this.data[key] = value;
};
this.get = function (key) {
return this.data[key];
};
this.remove = function (key) {
this.keys.remove(key);
this.data[key] = null;
};
this.each = function (fn) {
if (typeof fn != 'function') {
return;
}
var len = this.keys.length;
for (var i = 0; i < len; i++) {
var k = this.keys[i];
fn(k, this.data[k], i);
}
};
this.entrys = function () {
var len = this.keys.length;
var entrys = new Array(len);
for (var i = 0; i < len; i++) {
entrys[i] = {
key: this.keys[i],
value: this.data[i]
};
}
return entrys;
};
this.isEmpty = function () {
return this.keys.length == 0;
};
this.size = function () {
return this.keys.length;
};
}
これは古い質問ですが、既存の回答は非常に危険なものになる可能性があるため、この回答は、ここで遭遇する可能性のある将来の人々のために残したいと思いました...
ObjectをHashMapとして使用することに基づく回答は壊れており、String以外のものをキーとして使用すると、非常に厄介な結果を引き起こす可能性があります。問題は、Objectプロパティが.toStringメソッドを使用してStringに強制変換されることです。これは、次のような不快感をもたらす可能性があります。
function MyObject(name) {
this.name = name;
};
var key1 = new MyObject("one");
var key2 = new MyObject("two");
var map = {};
map[key1] = 1;
map[key2] = 2;
そのObjectがここでJava Mapと同じように振る舞うことを期待しているなら、そのmapがStringキー[object Object]
を持つ1つのエントリだけを含むことを発見するのはかなり賢明でしょう:
> JSON.stringify(map);
{"[object Object]": 2}
これは明らかにJavaのHashMapに代わるものではありません。奇妙なことに、その年齢を考えると、Javascriptには現在汎用のマップオブジェクトがありません。しかし、地平線には希望があります。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map ブラウザ互換性テーブルを見ると、これはまだ汎用Webアプリケーションで使用する準備ができていないことがわかります。
それまでの間、あなたができる最善のことは次のとおりです。
map[toUniqueString(key1)] = 1
時々、しかし、それは不可能です。 Fileオブジェクトなどに基づいてデータをマップしたい場合は、Fileオブジェクトが公開する属性がその一意性を保証するのに十分ではないため、これを行う信頼できる方法はありません。 (ディスク上の異なるファイルを表す2つのFileオブジェクトがあるかもしれませんが、ブラウザのJSでそれらを区別する方法はありません)。これらの場合、残念ながら、できることはすべて、コードをリファクタリングすることで、これらを強力に保存する必要がなくなります。おそらく、代わりに配列を使用し、それらをインデックスによって排他的に参照することによって。
var map = {'myKey1':myObj1, 'mykey2':myObj2};
// You don't need any get function, just use
map['mykey1']
JQueryに限定されていない場合は、prototype.jsフレームワークを使用できます。 Hashというクラスがあります。JQueryとprototype.jsを一緒に使用することもできます。 jQuery.noConflict()と入力するだけです。
var h = new Hash();
h.set("key", "value");
h.get("key");
h.keys(); // returns an array of keys
h.values(); // returns an array of values