ホームページ  >  記事  >  ウェブフロントエンド  >  ハッシュテーブルのJSシミュレーション実装とその応用について詳しく解説

ハッシュテーブルのJSシミュレーション実装とその応用について詳しく解説

不言
不言オリジナル
2018-05-04 14:51:001025ブラウズ

この記事では、ハッシュ テーブルを実装するための JS シミュレーションとそのアプリケーションを主に紹介し、ハッシュ テーブルを実装するための JavaScript シミュレーションの手順、関連する操作テクニック、および使用方法をサンプルの形式で分析します。この記事では、ハッシュ テーブルとアプリケーションの JS シミュレートの実装について説明します。参考までに皆さんと共有してください。詳細は次のとおりです:

アルゴリズム、特に配列に関連するアルゴリズムでは、ハッシュ テーブルを使用すると問題を非常にうまく解決できるため、この記事ではハッシュ テーブルの実装方法に関する情報をいくつか記録します。 js で記述し、実際の問題解決の例を示します。

注:

この記事は実際にはハッシュ テーブルに関するものではなく、ハッシュ テーブルの使用方法に似ているだけです。

パート 1: 関連する知識ポイント

属性の列挙:

var person = {
  name: "zzw",
  sex: "Male",
  age: 21
};
for (var prop in person) {
  console.log(prop + " ",person[prop]);
}

出力:

つまり、オブジェクトの場合、 for in を使用してオブジェクトのプロパティを列挙できます。

属性の削除:

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);

オブジェクトの属性は delete によって削除でき、戻り値が返されます。 以下のように:

注: 通常、削除できるのはオブジェクトの属性のみですが、次のような変数は削除できません。削除される。

属性が存在するかどうかを検出します:

var x = 1;
console.log(delete x);

前者は true を返し、後者は false を返します。 つまり、 in を使用して、オブジェクトにこの属性が含まれているかどうかを判断できます。

属性の追加:

var person = {
  name: "zzw",
  sex: "Male",
  age: 21
};
console.log("age" in person);
console.log("someOther" in person);

属性の追加は非常に簡単です。上記のように、最終的に印刷されるオブジェクトには school 属性が含まれます。

その2: jsを使ってハッシュテーブルを実装する

以下はコンストラクタを通じて取得したハッシュテーブルで、実際の問題では以下の関数が比較的豊富です。 、選択的に使用できます。

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

パート 3: アプリケーション例

問題: 整数の配列 (順序なし) が与えられ、その合計が指定された値になるような 2 つの数値を見つけ、これら 2 つの添え字を返します。配列要素の値が異なることを前提とした数値 (配列の添字は 0 から始まります)。

実装は以下の通りです:

// 创建构造函数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 = {};
    };
}

実際の使用プロセスでは、最初に主要な関数を記述し、必要に応じて追加することができます。

関連おすすめ:

観覧車くじのJS実装

カプセル化のJSシミュレーション実装方法

以上がハッシュテーブルのJSシミュレーション実装とその応用について詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。