ES6(ES2015) でサポートされたオブジェクトで、値のリストを保持します。Chrome 38, Firefox 13, Internet Explorer 11, Opera 25, Safari 7.1 以降で使用できます。
var set = new Set();
set.add("Tanaka");
set.add("Suzuki");
console.log(set); // "Tanaka", "Suzuki"
同じ値を追加してもリストは増えません。
set.add("Tanaka");
set.add("Suzuki");
set.add("Suzuki");
console.log(set); // "Tanaka", "Suzuki"
コンストラクタには値の配列を指定できます。Internet Explorer と Safari ではサポートされていません。
var set = new Set(["Tanaka", "Suzuki"]);
リストの個数を返します。
var set = new Set();
set.add("Tanaka");
set.add("Suzuki");
set.size; // => 2
has() を用いて、値が含まれているか確認することができます。
var set = new Set() set.add("Tanaka"); set.add("Suzuki"); if (set.has("Tanaka")) { console.log("Exist!"); }
delete() は指定した値を、clear() はすべての値をクリアします。
var set = new Set(); set.add("Tanaka"); set.add("Suzuki"); set.delete("Tanaka"); set.clear();
for ... of 文でキー・バリューのリストを扱うことができます。Internet Explorer と Opera ではサポートされていません。
for (var value of set) { console.log(value); }
keys(), value(), entries() も使用できますが、key にも value にも同じ値が格納されます。
for (var key of set.keys()) { console.log(key); } for (var value of set.values()) { console.log(value); } for (var [key, value] of set.entries()) { console.log(key, "=", value); }
forEach 文でキー・バリューのリストを扱うことができます。こちらは、Internet Explorer でもサポートされていますが、Opera でサポートされていません。key も指定できますが、key と value に同じ値が格納されます。
set.forEach(function(value) {
console.log(value);
})
set.forEach(function(value, key) {
console.log(key, ":", value);
})
set.forEach(function(value, key, set) {
console.log(key, value, set);
});
set.forEach(function(value, key) {
console.log(key, value, this);
}, set); // setをthisとして引き渡す
WeakSet は WeakMap のセット版です。詳細は WeakMap を参照してください。