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 인 스 턴 스 의 한 방법 명 이 라면 덮어 쓸 수 있 고 방법 이 고장 날 수 있 습 니 다.그래서 종합 적 으로 고려 한 후에 본문 [실현] 중의 코드 를 작 성 했 습 니 다.더 좋 은 실현 방법 이 있 으 면 공유 할 수 있 습 니 다. 같이 공부 하 세 요 ~ ~

좋은 웹페이지 즐겨찾기