JavaScript 에서 실 현 된 HashTable (키 쌍) 클래스
백 엔 드 언어 에 HashTable 데이터 구조 가 존재 합 니 다. 그 는 key / value 형식 으로 데 이 터 를 저장 할 수 있 고 key 를 통 해 value 의 값 을 빠르게 얻 을 수 있 습 니 다.이것 은 매우 편리 하고 자주 사용 하 는 기능 이다.네 이 티 브 JS 에서 도 HashTable 의 데이터 형식 (유형 에 주의 하 세 요. 구조 가 아 닙 니 다) 을 실현 하지 못 했 습 니 다. 이와 유사 한 데이터 구조 인 Object 가 있 습 니 다. JS 의 Object 는 본질 적 으로 key / value 의 형식 입 니 다. 그 는 HashTable 의 데이터 구조 라 고 볼 수 있 습 니 다.다음은 Object 의 특성 을 이용 하여 HashTable 이라는 데이터 형식 을 실현 하 겠 습 니 다.
이루어지다
//trim jQuery
var whitespace = "[\\x20\\t\\r\
\\f]",
rtrim = new RegExp("^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g");
// string
String.prototype.trim = String.prototype.trim || function () {
return this.treplace(rtrim, "");
};
//HashTable
function HashTable() {
var self = this,
hash = {},
count = 0,
keys = [],
values = [];
self.checkKey = function (key) {
if ((typeof key === "string" && key.trim !== "") || typeof key === "number" || typeof key === "boolean") {
return key;
} else {
/* key ( Object) , ,
, key , ,
object , ; key
。*/
throw new Error("Key , ");
}
};
self.add = function (key, value) {
key = this.checkKey(key);
hash[key] = value;// key , key,value
count++;
if (keys.indexOf(key) == -1) {
keys.push(key);
}
if (values.indexOf(value) == -1) {
values.push(value);
}
return self;
};
self.remove = function (key) {
key = this.checkKey(key);
if (hash.hasOwnProperty(key)) {
var value = hash[key];
delete hash[key];
count--;
if (count < 0) {
count = 0;
}
var kIndex = keys.indexOf(key),
vIndex = values.indexOf(value);
if (kIndex != -1) {
keys.splice(kIndex, 1);
}
if (vIndex != -1) {
values.splice(vIndex, 1);
}
}
return self;
};
self.clear = function () {
for (var i = 0; i < keys.length; i++) {
if (hash.hasOwnProperty(keys[i])) {
delete hash[keys[i]];
}
}
keys.splice(0, keys.length);
values.splice(0, values.length);
return self;
};
self.count = function () {
return count;
};
self.contains = function (key) {
return keys.indexOf(key) !== -1;;
};
self.containsKey = function (key) {
return keys.indexOf(key) !== -1;
};
self.containsValue = function (value) {
return values.indexOf(value) !== -1;
};
self.getKeys = function () {
return keys.concat([]);
};
self.getValues = function () {
return values.concat([]);
};
// key
self.getValue = function (key) {
if (hash.hasOwnProperty(key)) {
return hash[key];
}
};
//
self.each = function (fun) {
if (typeof fun === "function") {
for (var i = 0; i < keys.length; i++) {
var key = keys[i],
value = hash[key];
var stop = fun.call({
key: key,
value: value
}, key, value);
if (stop === false) break;
}
}
};
self.toList = function () {
var result = [];
for (var i = 0; i < keys.length; i++) {
var key = keys[i],
value = hash[key];
result.push({
key: key,
value: value
});
}
return result;
};
};
개선 하 다.
1 판 실현 에서 저 는 add 방법 에서 키 를 HashTable 과 같은 인 스 턴 스 를 직접 불 러 왔 습 니 다. 이렇게 하 는 장점 은 비슷 한 백 엔 드 사용 방식 에 더욱 가 까 워 질 수 있다 는 것 입 니 다. 다음 과 같 습 니 다.
var ht = new HashTable();
ht.add("key1","value1");
ht["key2"]="value2";
ht.getValue("key2");//value2
ht["key1"];//value1
이러한 실현 은 사용 할 때 더욱 편리 한 대변 을 제공 하지만 데이터 의 유효성 은 보장 되 지 않 습 니 다. 예 를 들 어 key 가 Hash Table 인 스 턴 스 의 한 방법 명 이 라면 덮어 쓸 수 있 고 방법 이 고장 날 수 있 습 니 다.그래서 종합 적 으로 고려 한 후에 본문 [실현] 중의 코드 를 작 성 했 습 니 다.더 좋 은 실현 방법 이 있 으 면 공유 할 수 있 습 니 다. 같이 공부 하 세 요 ~ ~
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
vue 입문 vue 와 react 와 Angular 의 관계 와 차이vue 의 목 표 는 가능 한 한 간단 한 API 를 통 해 '응답 하 는 데이터 바 인 딩' 과 '조 합 된 보기 구성 요소' 를 실현 하 는 것 입 니 다. 4) vue 와 angular 바 인 딩 은 모두 {{...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.