Set Set 对象允许你存储任何类型的唯一值,无论是原始值 或者是对象引用 。
简述
Set对象是值的集合,你可以按照插入的顺序迭代 它的元素。 Set中的元素只会出现一次,即 Set 中的元素是唯一的 。
值的相等
因为 Set 中的值总是唯一的,所以需要判断两个值是否相等。在ECMAScript规范的早期版本中,这不是基于和===操作符中使用的算法相同的算法。具体来说,对于 Set s, +0 (+0 严格相等于-0)和-0是不同的值。然而,在 ECMAScript 2015规范中这点已被更改。有关详细信息,请参阅浏览器兼容性 表中的“Key equality for -0 and 0”。
另外,NaN和undefined都可以被存储在Set 中, NaN之间被视为相同的值 (NaN被认为是相同的,尽管 NaN !== NaN )。
Constructor
Set() 创建一个新的Set对象。 静态属性 get Set[@@species] 构造函数用来创建派生对象.
实例属性
Set.prototype.size 返回 Set 对象中的值的个数 实例方法 Set.prototype.add(value) 在Set对象尾部添加一个元素。返回该Set对象。 Set.prototype.clear() 移除Set对象内的所有元素。 Set.prototype.delete(value) 移除Set中与这个值相等的元素,返回Set.prototype.has(value)在这个操作前会返回的值(即如果该元素存在,返回true,否则返回false)。Set.prototype.has(value)在此后会返回false。 Set.prototype.entries() 返回一个新的迭代器对象,该对象包含Set对象中的按插入顺序排列的所有元素的值的[value, value]数组。为了使这个方法和Map对象保持相似, 每个值的键和值相等。 Set.prototype.forEach(callbackFn[, thisArg]) 按照插入顺序,为Set对象中的每一个值调用一次callBackFn。如果提供了thisArg参数,回调中的this会是这个参数。 Set.prototype.has(value) 返回一个布尔值,表示该值在Set中存在与否。 Set.prototype.keys() (en-US) 与values()方法相同,返回一个新的迭代器对象,该对象包含Set对象中的按插入顺序排列的所有元素的值。 Set.prototype.values() 返回一个新的迭代器对象,该对象包含Set对象中的按插入顺序排列的所有元素的值。 Set.prototype@@iterator 返回一个新的迭代器对象,该对象包含Set对象中的按插入顺序排列的所有元素的值。
示例
使用Set对象
let mySet = new Set();
mySet.add(1);
mySet.add(5);
mySet.add(5);
mySet.add("some text");
let o = {a: 1, b: 2};
mySet.add(o);
mySet.add({a: 1, b: 2});
mySet.has(1);
mySet.has(3);
mySet.has(5);
mySet.has(Math.sqrt(25));
mySet.has("Some Text".toLowerCase());
mySet.has(o);
mySet.size;
mySet.delete(5);
mySet.has(5);
mySet.size;
console.log(mySet);
迭代Set
for (let item of mySet) console.log(item);
for (let item of mySet.keys()) console.log(item);
for (let item of mySet.values()) console.log(item);
for (let [key, value] of mySet.entries()) console.log(key);
var myArr = Array.from(mySet);
mySet.add(document.body);
mySet.has(document.querySelector("body"));
mySet2 = new Set([1, 2, 3, 4]);
mySet2.size;
[...mySet2];
let intersection = new Set([...set1].filter(x => set2.has(x)));
let difference = new Set([...set1].filter(x => !set2.has(x)));
mySet.forEach(function(value) {
console.log(value);
});
Array 相关
let myArray = ["value1", "value2", "value3"];
let mySet = new Set(myArray);
mySet.has("value1");
console.log([...mySet]);
数组去重
const numbers = [2,3,4,4,2,3,3,4,4,5,5,6,6,7,5,32,3,4,5]
console.log([...new Set(numbers)])
String 相关
let text = 'India';
let mySet = new Set(text);
mySet.size;
new Set("Firefox")
new Set("firefox")
|