해시 테이블의 JS 시뮬레이션 구현 및 적용에 대한 자세한 설명

不言
풀어 주다: 2018-05-04 14:51:00
원래의
1064명이 탐색했습니다.

이 글에서는 주로 해시 테이블을 구현하기 위한 JS 시뮬레이션과 그 응용을 소개합니다. 해시 테이블을 구현하기 위한 자바스크립트 시뮬레이션의 단계와 관련 운영 기술 및 사용 방법을 예제 형식으로 분석합니다.

예시 이 기사에서는 JS Simulate의 해시 테이블 및 애플리케이션 구현을 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 세부 사항은 다음과 같습니다.

알고리즘, 특히 배열과 관련된 알고리즘에서 해시 테이블을 사용하면 문제를 매우 잘 해결할 수 있으므로 이 기사에서는 해시 테이블 구현 방법에 대한 몇 가지 정보를 기록합니다. js에서 실제 문제 해결의 예를 제시하세요.

참고: 이 문서는 실제로 해시 테이블에 관한 것이 아니라 해시 테이블 사용과 유사합니다. 1 부 1 : 관련 지식 지점의 속성 :

R

var person = {
  name: "zzw",
  sex: "Male",
  age: 21
};
for (var prop in person) {
  console.log(prop + " ",person[prop]);
}
로그인 후 복사
Aloutput :

객체의 경우 객체 속성을 열거하는 데 사용할 수 있습니다.

속성 삭제:

var person = {
  name: "zzw",
  sex: "Male",
  age: 21
};
var ifRemove = delete person.name;
for (var prop in person) {
  console.log(prop + " ",person[prop]);
}
console.log(ifRemove);
로그인 후 복사

객체의 속성은 삭제로 삭제될 수 있으며 반환 값이 있습니다.

참고: 일반적으로 개체의 속성만 삭제할 수 있지만 변수는 삭제할 수 없습니다. 예:

var x = 1;
console.log(delete x);
로그인 후 복사

이때 인쇄 스테이션에서는 false를 출력합니다. 삭제됩니다.

속성이 존재하는지 감지:

var person = {
  name: "zzw",
  sex: "Male",
  age: 21
};
console.log("age" in person);
console.log("someOther" in person);
로그인 후 복사

전자는 true를 반환하고 후자는 false를 반환합니다. 즉, 객체에 이 속성이 포함되어 있는지 확인하기 위해 in을 사용할 수 있습니다.

속성 추가:

var person = {
  name: "zzw",
  sex: "Male",
  age: 21
};
person["school"] = "XJTU";
console.log(person);
로그인 후 복사

위에서 볼 수 있듯이 최종 인쇄된 개체에는 학교 속성이 포함되어 있습니다.

2부: js를 사용하여 해시 테이블 구현

다음은 생성자를 통해 얻은 해시 테이블을 사용할 때 인스턴스화만 하면 되며, 실제 문제에서는 다음 함수가 상대적으로 풍부합니다. , 선택적으로 사용할 수 있습니다.

// 创建构造函数HashTable
function HashTable() {
    // 初始化哈希表的记录条数size
    var size = 0;
    // 创建对象用于接受键值对
    var res = {};
    // 添加关键字,无返回值
    this.add = function (key, value) {
      //判断哈希表中是否存在key,若不存在,则size加1,且赋值
      if (!this.containKey(key)) {
        size++;
      }
      // 如果之前不存在,赋值; 如果之前存在,覆盖。
      res[key] = value;
    };
    // 删除关键字, 如果哈希表中包含key,并且delete返回true则删除,并使得size减1
    this.remove = function (key) {
      if (this.containKey(key) && (delete res[key])) {
        size--;
      }
    };
    // 哈希表中是否包含key,返回一个布尔值
    this.containKey = function (key) {
      return (key in res);
    };
    // 哈希表中是否包含value,返回一个布尔值
    this.containValue = function (value) {
      // 遍历对象中的属性值,判断是否和给定value相等
      for (var prop in res) {
        if (res[prop] === value) {
          return true;
        }
      }
      return false;
    };
    // 根据键获取value,如果不存在就返回null
    this.getValue = function (key) {
      return this.containKey(key) ? res[key] : null;
    };
    // 获取哈希表中的所有value, 返回一个数组
    this.getAllValues = function () {
      var values = [];
      for (var prop in res) {
        values.push(res[prop]);
      }
      return values;
    };
    // 根据值获取哈希表中的key,如果不存在就返回null
    this.getKey = function (value) {
      for (var prop in res) {
        if (res[prop] === value) {
          return prop;
        }
      }
      // 遍历结束没有return,就返回null
      return null;
    };
    // 获取哈希表中所有的key,返回一个数组
    this.getAllKeys = function () {
      var keys = [];
      for (var prop in res) {
        keys.push(prop);
      }
      return keys;
    };
    // 获取哈希表中记录的条数,返回一个数值
    this.getSize = function () {
      return size;
    };
    // 清空哈希表,无返回值
    this.clear = function () {
      size = 0;
      res = {};
    };
}
로그인 후 복사

3부: 응용 프로그램 예제

문제: 주어진 정수 배열(순서 없음)에서 합계가 지정된 값이 되는 두 숫자를 찾고 이 두 숫자의 첨자를 반환합니다. 숫자(배열 첨자는 0부터 시작), 배열 요소의 값이 다르다고 가정합니다.

구현은 다음과 같습니다.

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>哈希表的使用</title>
</head>
<body>
  <script>
  function queryIndex(arr, result) {
    var hashTable = new HashTable();
    var arrLength = arr.length;
    var sub = [];
    for (var i = 0; i < arrLength; i++) {
      // 扫描一遍,存储下标和值
      hashTable.add(i, arr[i]);
    }
    for (var j = 0; j < arrLength; j++) {
      if (hashTable.containValue(result - arr[j]) && result !== 2*arr[j]) {
        // 获取两个下标,跳出循环
        sub.push(j);
        var antherIndex = Number(hashTable.getKey(result - arr[j]));
        sub.push(antherIndex);
        break;
      }
    }
    if (sub.length !== 0) {
      return sub;
    } else {
      return -1;
    }
  }
  console.log(queryIndex([1,5,7,3,8], 15)); // 2, 4
  console.log(queryIndex([8,18,28,12,29,17], 46)); // 2, 4
  console.log(queryIndex([8,18,28,12,29,17], 2)); // -1
   // 创建构造函数HashTable
  function HashTable() {
    // 初始化哈希表的记录条数size
    var size = 0;
    // 创建对象用于接受键值对
    var res = {};
    // 添加关键字,无返回值
    this.add = function (key, value) {
      //判断哈希表中是否存在key,若不存在,则size加1,且赋值
      if (!this.containKey(key)) {
        size++;
      }
      // 如果之前不存在,赋值; 如果之前存在,覆盖。
      res[key] = value;
    };
    // 删除关键字, 如果哈希表中包含key,并且delete返回true则删除,并使得size减1
    this.remove = function (key) {
      if (this.containKey(key) && (delete res[key])) {
        size--;
      }
    };
    // 哈希表中是否包含key,返回一个布尔值
    this.containKey = function (key) {
      return (key in res);
    };
    // 哈希表中是否包含value,返回一个布尔值
    this.containValue = function (value) {
      // 遍历对象中的属性值,判断是否和给定value相等
      for (var prop in res) {
        if (res[prop] === value) {
          return true;
        }
      }
      return false;
    };
    // 根据键获取value,如果不存在就返回null
    this.getValue = function (key) {
      return this.containKey(key) ? res[key] : null;
    };
    // 获取哈希表中的所有value, 返回一个数组
    this.getAllValues = function () {
      var values = [];
      for (var prop in res) {
        values.push(res[prop]);
      }
      return values;
    };
    // 根据值获取哈希表中的key,如果不存在就返回null
    this.getKey = function (value) {
      for (var prop in res) {
        if (res[prop] === value) {
          return prop;
        }
      }
      // 遍历结束没有return,就返回null
      return null;
    };
    // 获取哈希表中所有的key,返回一个数组
    this.getAllKeys = function () {
      var keys = [];
      for (var prop in res) {
        keys.push(prop);
      }
      return keys;
    };
    // 获取哈希表中记录的条数,返回一个数值
    this.getSize = function () {
      return size;
    };
    // 清空哈希表,无返回值
    this.clear = function () {
      size = 0;
      res = {};
    };
  }
  </script>
</body>
</html>
로그인 후 복사

실제 사용 과정에서는 주요 기능을 먼저 작성하고 필요할 때 추가하면 됩니다. 관련 추천:

관람차 복권의 JS 구현

캡슐화의 JS 시뮬레이션 구현 방법

위 내용은 해시 테이블의 JS 시뮬레이션 구현 및 적용에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!