C#에서는 해시테이블이나 딕셔너리를 사용하여 키를 기반으로 값을 가져오기만 하면 이 함수를 쉽게 구현할 수 있습니다. 사실 조금만 다루면 js도 해시테이블과 유사한 기능을 구현할 수 있습니다. 아래는 코드 붙여넣기를 중심으로 저자의 개발에 사용한 구현 방법을 요약한 것이다.
1. 구현 아이디어: 주요 목적은 프로토타입의 hasOwnProperty 메소드를 사용하여 객체의 항목을 추가, 제거해야 하는지 또는 일치하는 항목을 제거해야 하는지 등을 결정하는 것입니다. hasOwnProperty가 배열 값을 순회하는 것보다 더 똑똑하고 빠른 이유는 적어도 코드 관점에서 보면 O(1) 복잡성을 갖기 때문입니다.
2. 구현 코드
// js 해시 테이블
function HashTable() {
this.ObjArr = {};
this.Count = 0;
//Add
this.Add = function(key, value)
if (this.ObjArr.hasOwnProperty(key)) {
return false; //키가 이미 존재하는 경우 추가하지 마세요.
}
else {
this.ObjArr[key] = value;
this.Count ;
return true;
}
}
//항목 포함 여부
this.Contains = function(key) {
return this.ObjArr.hasOwnProperty (key);
}
//특정 항목을 가져오는 것은 실제로 this.ObjArr[key]
this.GetValue = function(key) {
if (this .Contains(key) ) {
return this.ObjArr[key];
}
else {
throw Error("해시테이블에 키가 없습니다: " String(key)); error
/ /return;
}
}
//Remove
this.Remove = function(key) {
if (this.Contains(key)) {
delete this.ObjArr [key];
this.Count--;
}
}
//Clear
this.Clear = function() {
this.ObjArr = { }; 개수 = 0;
}
}
3. 테스트 코드
//Employee
function(employeeid, userName) {
this.id =
this; .userName = userName;
function test() {
var ht = new HashTable()
var tmpEmployee =
for (var i = 1; i < 6 ; i ) {
tmpEmployee = 신입 사원(i, "Employee_" i)
ht.Add(i, tmpEmployee)
}
for (var i = 1; i <= ht.Count; i ) {
alert(ht.GetValue(i).userName); //실제로는 ht.ObjArr[i].userName과 동일합니다.
//alert(ht.ObjArr[i].userName );
}
ht.Remove(1);
alert(ht.Contains(1)) //false
alert(ht.Contains(2)); >//alert( ht.GetValue(1)); //Exception
var result = ht.GetValue(2);
if (result != null) {
alert("직원 ID:" result.id "; UserName:" result.userName);
}
ht.Add(2, "이 키는 이미 존재합니다!") //추가가 유효하지 않습니다
//ht.Clear() ; //Clear
alert(ht.Count);
}
새로운 해시테이블 객체를 생성하기만 하면 호출이 매우 간단합니다. 아주 간단하지 않나요? 즐겨보세요.
요약: 프로토타입 체인(프로토타입 체인)과 스코프 체인은 js의 두 가지 핵심 부분입니다. 이를 학습하고 이해함으로써 그 특성을 잘 활용함으로써 많은 복잡한 문제를 쉽게 해결할 수 있으며 매우 유연하고 효율적인 기능을 쉽게 구현할 수 있습니다.