웹 프론트엔드 JS 튜토리얼 해시 테이블의 JS 시뮬레이션 구현 및 적용에 대한 자세한 설명

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

May 04, 2018 pm 02:51 PM
javascript 애플리케이션 상해

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

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

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

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

R

1

2

3

4

5

6

7

8

<strong>var person = {

  name: &quot;zzw&quot;,

  sex: &quot;Male&quot;,

  age: 21

};

for (var prop in person) {

  console.log(prop + &quot; &quot;,person[prop]);

}</strong>

로그인 후 복사
Aloutput :

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

속성 삭제:

1

2

3

4

5

6

7

8

9

10

var person = {

  name: &quot;zzw&quot;,

  sex: &quot;Male&quot;,

  age: 21

};

var ifRemove = delete person.name;

for (var prop in person) {

  console.log(prop + &quot; &quot;,person[prop]);

}

console.log(ifRemove);

로그인 후 복사

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

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

1

2

var x = 1;

console.log(delete x);

로그인 후 복사

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

속성이 존재하는지 감지:

1

2

3

4

5

6

7

var person = {

  name: &quot;zzw&quot;,

  sex: &quot;Male&quot;,

  age: 21

};

console.log(&quot;age&quot; in person);

console.log(&quot;someOther&quot; in person);

로그인 후 복사

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

속성 추가:

1

2

3

4

5

6

7

var person = {

  name: &quot;zzw&quot;,

  sex: &quot;Male&quot;,

  age: 21

};

person[&quot;school&quot;] = &quot;XJTU&quot;;

console.log(person);

로그인 후 복사

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

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

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

// 创建构造函数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) &amp;&amp; (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부터 시작), 배열 요소의 값이 다르다고 가정합니다.

구현은 다음과 같습니다.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

&lt;!DOCTYPE html&gt;

&lt;html lang=&quot;en&quot;&gt;

&lt;head&gt;

  &lt;meta charset=&quot;UTF-8&quot;&gt;

  &lt;title&gt;哈希表的使用&lt;/title&gt;

&lt;/head&gt;

&lt;body&gt;

  &lt;script&gt;

  function queryIndex(arr, result) {

    var hashTable = new HashTable();

    var arrLength = arr.length;

    var sub = [];

    for (var i = 0; i &lt; arrLength; i++) {

      // 扫描一遍,存储下标和值

      hashTable.add(i, arr[i]);

    }

    for (var j = 0; j &lt; arrLength; j++) {

      if (hashTable.containValue(result - arr[j]) &amp;&amp; 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) &amp;&amp; (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 = {};

    };

  }

  &lt;/script&gt;

&lt;/body&gt;

&lt;/html&gt;

로그인 후 복사

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

관람차 복권의 JS 구현

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

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

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

PHP에서 화살표 기호의 역할과 실제 적용 PHP에서 화살표 기호의 역할과 실제 적용 Mar 22, 2024 am 11:30 AM

PHP에서 화살표 기호의 역할과 실제 적용

iPhone 홈 화면에서 삭제를 취소하는 방법 iPhone 홈 화면에서 삭제를 취소하는 방법 Apr 17, 2024 pm 07:37 PM

iPhone 홈 화면에서 삭제를 취소하는 방법

초보자부터 숙련자까지: Linux tee 명령의 다양한 응용 시나리오 탐색 초보자부터 숙련자까지: Linux tee 명령의 다양한 응용 시나리오 탐색 Mar 20, 2024 am 10:00 AM

초보자부터 숙련자까지: Linux tee 명령의 다양한 응용 시나리오 탐색

PHP 모듈로 연산자의 역할과 사용법에 대한 자세한 설명 PHP 모듈로 연산자의 역할과 사용법에 대한 자세한 설명 Mar 19, 2024 pm 04:33 PM

PHP 모듈로 연산자의 역할과 사용법에 대한 자세한 설명

Go 언어의 장점과 적용 시나리오를 살펴보세요. Go 언어의 장점과 적용 시나리오를 살펴보세요. Mar 27, 2024 pm 03:48 PM

Go 언어의 장점과 적용 시나리오를 살펴보세요.

클라우드 컴퓨팅 분야에서 Linux의 광범위한 적용 클라우드 컴퓨팅 분야에서 Linux의 광범위한 적용 Mar 20, 2024 pm 04:51 PM

클라우드 컴퓨팅 분야에서 Linux의 광범위한 적용

MySQL 타임스탬프 이해: 기능, 특징 및 애플리케이션 시나리오 MySQL 타임스탬프 이해: 기능, 특징 및 애플리케이션 시나리오 Mar 15, 2024 pm 04:36 PM

MySQL 타임스탬프 이해: 기능, 특징 및 애플리케이션 시나리오

Apple이 실행 중인 앱을 종료하는 방법에 대한 튜토리얼 Apple이 실행 중인 앱을 종료하는 방법에 대한 튜토리얼 Mar 22, 2024 pm 10:00 PM

Apple이 실행 중인 앱을 종료하는 방법에 대한 튜토리얼

See all articles