Set


今回は、配列に関連する重複データを除去および戻すために作成中のSetというjavascriptオブジェクトについて説明します.

Set ?


SETオブジェクトはES 6における重複除外値の集合である.

語句


new Set([iterable]);
  • パラメータ
    iterable
    重複可能なオブジェクトが渡されると、すべての要素が新しいセットに追加されます.パラメータが指定されていないかnullが渡されていない場合は、新しい設定は空です.
  • 戻り値
    新しいSetオブジェクト.
    MDN Setオブジェクト
  • 特長

    Set 객체は、重複しない唯一の値の集合である.Set 객체は以下の特徴を有する.
    1.同じ値を繰り返し含むことはできません
    2.要素順に意味がない
    3.インデックスで要素にアクセスできません.
    これらのSet 객체は数学集合の資料構造を体現するためである.
    したがって、Setにより、交差、合体、差分、余集等を実現することができる.

    使用方法


    Setオブジェクトの使用


    特定の要素の追加:add


    指定した値を持つ新しい要素をSetオブジェクトに追加
    //Set.add(value)
    mySet.add(1);		// Set { 1 }
    mySet.add(5);		// Set { 1, 5 }
    mySet.add('hi');	// Set { 1, 5, 'hi' }

    特定の要素を特定する:has


    Setオブジェクトに指定した値を持つ要素が存在するかどうかを確認します(boolean)
    //Set.has(value)
    //mySet { 1, 5, 'hi' }
    mySet.has(1);		// true
    mySet.has(3);		// false
    mySet.has('hi');	// true

    特定の要素の削除:delete


    Setオブジェクトから指定した値を持つ要素を削除
    //Set.delete(value)
    //mySet { 1, 5, 'hi' }
    mySet.delete('hi');	// Set { 1, 5 }
    mySet.delete(1);	// Set { 5 }```

    すべての要素を削除:clear


    Setオブジェクトからすべての要素を削除
    //Set.clear()
    //mySet { 1, 5, 'hi' }
    mySet.clear()	// Set { }```

    すべての要素を削除:clear


    Setオブジェクトからすべての要素を削除
    //Set.clear()
    //mySet { 1, 5, 'hi' }
    mySet.clear()	// Set { }```

    戻り要素数:size


    Setオブジェクトの要素数を返します
    //Set.size
    //mySet { 1, 5, 'hi' }
    mySet.size	// 3```
    var mySet = new Set();
    
    mySet.add(1); // Set { 1 }
    mySet.add(5); // Set { 1, 5 }
    mySet.add(5); // Set { 1, 5 }
    mySet.add('some text'); // Set { 1, 5, 'some text' }
    var o = {a: 1, b: 2};
    mySet.add(o);
    
    mySet.add({a: 1, b: 2}); // o와 다른 객체를 참조하므로 괜찮음
    
    mySet.has(1); // true
    mySet.has(3); // false, 3은 set에 추가되지 않았음
    mySet.has(5);              // true
    mySet.has(Math.sqrt(25));  // true
    mySet.has('Some Text'.toLowerCase()); // true
    mySet.has(o); // true
    
    mySet.size; // 5
    
    mySet.delete(5); // set에서 5를 제거함
    mySet.has(5);    // false, 5가 제거되었음
    
    mySet.size; // 4, 방금 값을 하나 제거했음
    console.log(mySet);// Set {1, "some text", Object {a: 1, b: 2}, Object {a: 1, b: 2}}

    繰り返し設定

    // set 내 항목에 대해 반복
    // 순서대로 항목을 (콘솔에) 기록: 1, "some text", {"a": 1, "b": 2}
    for (let item of mySet) console.log(item);
    
    // 순서대로 항목을 기록: 1, "some text", {"a": 1, "b": 2}
    for (let item of mySet.keys()) console.log(item);
    
    // 순서대로 항목을 기록: 1, "some text", {"a": 1, "b": 2}
    for (let item of mySet.values()) console.log(item);
    
    // 순서대로 항목을 기록: 1, "some text", {"a": 1, "b": 2}
    // (여기서 key와 value는 같음)
    for (let [key, value] of mySet.entries()) console.log(key, value);
    
    // Set 객체를 배열 객체로 변환 (Array.from으로)
    var myArr = Array.from(mySet); // [1, "some text", {"a": 1, "b": 2}]
    
    // 다음도 HTML 문서에서 실행하는 경우 작동함
    mySet.add(document.body);
    mySet.has(document.querySelector('body')); // true
    
    
    // forEach로 set 항목 반복
    mySet.forEach(function(value) {
      console.log(value);
    });

    基本集合演算の実装

    //Examples
    var setA = new Set([1, 2, 3, 4]),
        setB = new Set([2, 3]),
        setC = new Set([3, 4, 5, 6]);
    
    // 합집합
    setA.union(setC); // => Set [1, 2, 3, 4, 5, 6]
    // 교집합
    setA.intersection(setC); // => Set [3, 4]
    // 차집합
    setA.difference(setC); // => Set [1, 2]

    Arrayオブジェクトとの関係

    var myArray = ['value1', 'value2', 'value3'];
    
    // Array를 Set으로 변환하기 위해서는 정규 Set 생성자 사용
    var mySet = new Set(myArray);
    
    mySet.has('value1'); // true 반환
    
    // set을 Array로 변환하기 위해 전개 연산자 사용함.
    console.log([...mySet]); // myArray와 정확히 같은 배열을 보여줌

    👉 重複除外👍👍


    重複リストを削除するために、既存リストについて以下の処理を行った.
    const 중복 = [1, 2, 3, 4, 5, 1, 2, 3];
    const 중복제거용객체 = {};
    for (const el of 중복) {
      중복제거용객체[el] = true; // 어떤값이든 상관은 없음....
    }
    const 결과 = Object.keys(중복제거용객체);
    ///[1,2,3,4,5]
    Setを使えば、下記のように便利になります.
    const 중복 = [1, 2, 3, 4, 5, 1, 2, 3];
    const 결과 = new Set(중복);
    [...결과] 
    // 결과값이 Set 객체로 나와서 Array형태로 변경함
    // 배열 메소드를 사용하기 위함