JavaScriptデータ構造とアルゴリズム——セットSet

7155 ワード

JavaScriptにおける集合データ構造――Set
ES 6は、新しいデータ構造Setを提供し、それは同じ配列であり、異なるのは、集合Setの各要素が一意であり、重複した値がないことである.Set自体は構築関数であり、Setデータ構造を具体化することができる.
const s = new Set();
[2, 3, 5, 4, 5, 2, 2].forEach(x => s.add(x));
for (let i of s) {
    console.log(i);
}
// 2 3 5 4
Setセットの属性と方法属性1.コンストラクタは、newによって1セットを実例化することができます.
const set = new Set();
2.集合のメンバー総数を取得する
set.size
方法add(value)/値を追加し、Set構造自体delete(value)/値を削除し、ブール値を返します.削除が成功したかどうかはhas(value)/ブール値を返します.Setのメンバclear()/Setのセットのすべての要素であり、リターン値がないかどうかを表します.
オブジェクトの長さを判断し、for...in...文を使用してオブジェクトの属性を巡回すると、オブジェクトがプロトタイプObjectから継承される属性を含むので、hasOwnProperty方法を使用して、オブジェクトが属性を持つかどうかを検証する.すべてのJavaScriptオブジェクトにはハスOwnProperty方法があります.この方法は、オブジェクトが特定の属性を持つかどうかを示すブール値を返します.
データ構造セット
集合は行列ではなくオブジェクトを使用します.JavaScriptオブジェクトのキーの値は重複を許さないので、集合要素の唯一の重複は保証されます.
セットのために以下の方法を作成します.has(value):値がセットにある場合、trueに戻ります.そうでなければfalseに戻ります.add(value):新しいエントリをセットに追加します.remove(value):セットから1つの値を除去する.clear():セット内のすべてのアイテムを除去する.size():セットに含まれる要素の数を返します.配列のlength属性と類似しています.values():セット内のすべての値を含む配列を返します.
function Set() {
    var items = {};
    /* this.has = function(value) {
        return value in items;
    }; */

    this.has = function(value) {
        return items.hasOwnProperty(value);
    };

    this.add = function(value) {
        if (!this.has(value)) {
            items[value] = value;
            return true;
        }
        return false;
    };

    this.remove = function(value) {
        if (this.has(value)) {
            delete items[value];
            return true;
        }
        return false;
    };

    this.clear = function() {
        items = {};
    };

    /* this.size = function() {
        return Object.keys(items).length;
    }; */
    this.size = function() {
        var count = 0;
        for (var props in items) {
            if (items.hasOwnProperty(props)) ++count;
        }
        return count;
    };

    /* this.values = function() {
        return Object.keys(items);
    }; */
    this.values = function() {
        var values = [];
        for (var props in items) values.push(props);
        return values;
    };
}   
セットを使う
var set = new Set();
set.add(1);
console.log(set.size());  // 1
console.log(set.has(1));  // true
console.log(set.values());  // ['1']

set.add(2);
console.log(set.size());  // 2
console.log(set.has(2));  // true
console.log(set.values());  // ['1', '2']

set.remove(1);
console.log(set.has(1));  // false
console.log(set.values());  // ['2']
set.remove(2);
console.log(set.values());  // []