【少し話をする】ES 6 setの方法整理について

4813 ワード

ES 6は新しいデータ構造:setを提案した.Pythonのsetとの差は少なく、集合内で重複しない要素です.この腹ばいになると簡単に話します.
1、宣言
setは構造関数であるため、setのインスタンスはデータ型を参照し、setを宣言するにはnew演算子が必要です.
パラメータは配列または擬似配列であってもよい
let arr = [1,1,2,2,3,4,5,5,6,7];
let oSet = new Set(arr);

// Set(7){1, 2, 3, 4, 5, 6, 7 }

setの要素は一意性を有するため、setは重量除去の方法として使用することができる.
しかし、setはarrayではなく、後続に配列操作が必要な場合は、ステップ変換が必要であることを忘れないでください.
let arr2 = [...oSet];
let arr3 = Array.from(oSet);

//                 ,          。


sizeはsetのプロパティで、arrayのlengthと同じで、インスタンス内の要素の数を記録します.
let oSet = new Set();

for( let i = 0; i < 5; i++ ) {
    oSet.add(i)
};

console.log(oSet.size);      // 5

2、方法
setには8つの方法があります.
方法
さぎょう
パラメータ
戻り値
add(value)
setに値を追加
追加する値
set自体を返す
delete(value)
setから値を削除
削除する値
削除に成功したtrue、falseが失敗したブール値を返します.
has(value)
setで値を検索する
検索する値
ブール値を返します.trueはsetにあり、falseはありません.
clear()
セットをクリア
なし
なし
keys()
set内を巡回するためのキー名
なし
キー名を返す遍歴器
values()
set内の値を巡回する
なし
値を返す遍歴器
entries()
set内のキー値ペアを巡回する
なし
キー値ペアを返す遍歴器
forEach(callback())
コールバック関数を使用して巡回
コールバック関数
なし
1 add(value)
この方法では、setに反復可能な要素を追加できます.
let func = function(){};

let oSet = new Set(func);




set内の要素の一意性のため、addメソッドを使用して複数の同じ値が入力されても、1つだけ保持されます.
let oSet = new Set();

for( let i = 0; i < 100; i++ ) {
    oSet.add("a")
}

console.log(oSet.size);      // 1

ただし、参照データ型が入力されている場合は、setにポインタのみが格納されます.
let oSet = new Set();

for( let i = 0; i < 100; i++ ) {
    oSet.add(new String("a"))
}

console.log(oSet.size);      // 100

2 delete(value)
要素を削除してブール値を返し、trueを正常に返し、falseを返します.
let arr = [1,1,2,2,3,4,5,5,6,7];

let oSet = new Set(arr);

console.log(oSet.delete(1));     // true
console.log(oSet.delete(1));     // false          1       1 

3 has(value)
setを取得し、ブール値を返し、setに要素がある場合はtrueを返し、falseを返すことに失敗します.
let oSet = new Set();

oSet.add({});

oSet.add("a");

console.log(oSet.has({}));       // false      set         false

console.log(oSet.has("a"));      // true

4 clear()
クリアset
let oSet = new Set();

oSet.add("a");

console.log(oSet.size);      // 1

oSet.clear();

console.log(oSet.size);      // 0  set           

5 keys() & 6 values()
keys()values()メソッドはsetを遍歴するのに適しています.
しかし、キーの解構にキー値ペアがないという問題があります.キー値のみ.したがってkeys()メソッドはvalue()メソッドとほぼ同じです.
let oSet = new Set([1,1,2,2,3,4,5,5,6,7]);

console.log(oSet.keys());        // SetIterator {1, 2, 3, 4, 5, …}
console.log(oSet.values());     // SetIterator {1, 2, 3, 4, 5, …}

7 entries()
setも遍歴していますが、戻ってくるのはキー値ペアです(キーがなくてもキー値ペアを返します...)
let oSet = new Set([1,1,2,2,3,4,5,5,6,7]);

for( let i of oSet.entries()){
    console.log(i)
};

// [1, 1]
// [2, 2]
// [3, 3]
// [4, 4]
// [5, 5]
// [6, 6]
// [7, 7]

8 forEach(callback)
配列のforeachと同様に、インスタンス内の要素を操作するために使用されます.
let oSet = new Set([1,1,2,2,3,4,5,5,6,7]);

oSet.forEach((val, key)=>{
    console.log(`${key}:${val}`)
    return val+1
})

// 1:1
// 2:2
// 3:3
// 4:4
// 5:5
// 6:6
// 7:7
console.log(oSet);

// Set(7) {1, 2, 3, 4, 5, …}
// forEach  return    set      。

3、補足
set以外にもWeakSetという新しいデータ型があります
WeakSetにも一意性がありますが、size属性がなく弱い参照に属し、要素は外部参照カウントがない後にゴミ回収メカニズムで回収され、WeakSetで参照されるかどうかは考慮されません.したがって
WeakSetは遍歴できない!
だからそれらの遍歴方法はありません.
let oWeakSet = new WeakSet();

console.log(oWeakSet.forEach,oWeakSet.keys,oWeakSet.values,oWeakSet.entries);

// undefined undefined undefined undefined

WeakSetのコンストラクション関数では、伝達値は配列または他の反復可能なオブジェクトである必要がありますが、配列だけを伝達すると、エラーが発生します.
let arr = [1,1,2,2,3,4,5,5,6,7];
let oWeakSet = new WeakSet(arr);

// Uncaught TypeError: Invalid value used in weak set

WeakSet()のパラメータは1次元配列ではありません.2 Dスタート
let arr = [1,1,2,2,3,4,5,5,6,7];
let arr2 = [arr,[1,2],arr,[[1,2],[3,4,[5,6]]]];
let oWeakSet = new WeakSet(arr2);

console.log(oWeakSet);

// WeakSet {Array(2), Array(2), Array(10)}

//   WeakSet     ,  arr    

1次元配列またはオブジェクトを追加する必要がある場合はadd(value)を使用します.
let arr = [1,1,2,2,3,4,5,5,6,7];
let oWeakSet = new WeakSet();
oWeakSet.add(arr);
oWeakSet.add({});

console.log(oWeakSet);

// WeakSet {Array(10), {…}}

また、WeakSetにはSetの他の方法もあります
oWeakSet.add();
oWeakSet.delete();
oWeakSet.has();

戻ってくるのもSetの同類の方法と同じです.