JavaScript/JQuery를 사용하여 간단한 맵을 만드는 방법
이 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);
}
편집: 최신 답변이 아닌 ECMA스크립트 2015(ES6) 표준 Javascript에는 Map이 구현되어 있습니다. 자세한 내용은 여기를 참조하십시오. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/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;
};
}
이것은 오래된 질문이지만, 기존의 대답은 매우 위험할 수 있기 때문에, 저는 이 대답을 여기에 우연히 들어올지도 모르는 미래의 사람들에게 남기고 싶었습니다.
개체를 해시맵으로 사용하는 것에 기반한 응답이 손상되어 문자열이 아닌 다른 항목을 키로 사용하는 경우 매우 심각한 결과를 초래할 수 있습니다.문제는 개체 속성이 .toString 메서드를 사용하여 Strings에 강제로 적용된다는 것입니다.이로 인해 다음과 같은 불쾌감이 발생할 수 있습니다.
function MyObject(name) {
this.name = name;
};
var key1 = new MyObject("one");
var key2 = new MyObject("two");
var map = {};
map[key1] = 1;
map[key2] = 2;
개체가 여기서 Java 맵과 동일한 방식으로 동작할 것으로 예상했다면, 맵에 String 키가 있는 항목이 하나만 포함되어 있다는 것을 알게 되면 더 불쾌해질 것입니다.[object Object]
:
> JSON.stringify(map);
{"[object Object]": 2}
이것은 분명히 자바의 해시맵을 대체하는 것이 아닙니다. 이상하게도 자바스크립트에는 현재 범용 맵 오브젝트가 없습니다.하지만 곧 희망이 있습니다. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map 에서 브라우저 호환성 표를 보면 범용 웹 앱에서 아직 사용할 준비가 되지 않았다는 것을 알 수 있습니다.
그 동안 할 수 있는 최선의 방법은 다음과 같습니다.
- 의도적으로 문자열을 키로 사용합니다.즉, 사용하는 키의 암묵적인 .toString에 의존하는 대신 명시적 문자열을 키로 사용합니다.
- 키로 사용 중인 개체에 대해 고유성을 이해하는 데 적합한 정의된 .toString() 메서드가 있는지 확인합니다.
- 항목을 저장하고 검색할 때 키 개체의 .toString을 변경할 수 없거나 변경하지 않으려면 개체를 고유성에 대한 이해를 나타내는 문자열로 변환합니다.예.
map[toUniqueString(key1)] = 1
하지만, 때때로, 그것은 불가능합니다.예를 들어 File 개체를 기반으로 데이터를 매핑하려는 경우 File 개체가 노출하는 특성이 고유성을 보장하기에 충분하지 않기 때문에 이를 수행할 수 있는 신뢰할 수 있는 방법이 없습니다. (Disk에 서로 다른 파일을 나타내는 두 개의 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
언급URL : https://stackoverflow.com/questions/4246980/how-to-create-a-simple-map-using-javascript-jquery
'source' 카테고리의 다른 글
순수 자바스크립트로 AJAX 사후 구현 (0) | 2023.07.26 |
---|---|
clock_gettime()의 다양한 클럭 이해 (0) | 2023.07.26 |
Spring Rest Template를 이용한 페이지 응답 소비 방법 (0) | 2023.07.26 |
Maria Db - 사용자 ID가 = 변수인 모든 메시지 목록에서 최근 메시지를 가져옵니다. (0) | 2023.07.26 |
Powershell 7.3.0 탭 완료가 작동하지 않음 (0) | 2023.07.26 |