如何使用set对象
首先创建一个set对象
const mySet = new Set();
现在我们拥有了一个空的set对象,我们可以通过.add
方法向其中添加一个一个数字1
mySet.add(1);
我们怎么知道向mySet
中成功添加了1呢?可以通过.has
方法
mySet.has(1); //true
我们再向mySet
中添加一个对象,并且检查是否添加对象成功
const obj = { name: 'Daffodil' };
mySet.add(obj);
mySet.has(obj);//true
需要注意的是我们检查的是对象的引用,而不是对象自己的keys,换言之,下面的返回值就是false
mySet.has({ name: 'Daffodil' }); //false
我们可以通过.size
方法知道mySet
中有多少个元素
mySet.size;//2
我们可以通过.delete
方法删除mySet
中某个元素
mySet.delete(1);
mySet.has(1); // false
最后我们可以通过.clear
方法清除mySet
中所有元素
mySet.clear();
mySet.size; //0
对set对象进行遍历
- 最简单的遍历一个set对象的方法是使用
forEach
方法:
new Set([1, 2, 3]).forEach(el => {
console.log(el * 2);
});
// 2 4 6
- 通过
entries
方法遍历
entries() 方法返回一个新的迭代器对象 ,这个对象的元素是类似 [value, value] 形式的数组,value 是集合对象中的每个元素,迭代器对象元素的顺序即集合对象中元素插入的顺序。由于集合对象不像 Map 对象那样拥有 key,然而,为了与 Map 对象的 API 形式保持一致,故使得每一个 entry 的 key 和 value 都拥有相同的值,因而最终返回一个 [value, value] 形式的数组。
var mySet = new Set();
mySet.add("foobar");
mySet.add(1);
mySet.add("baz");
var setIter = mySet.entries();
console.log(setIter.next().value); // ["foobar", "foobar"]
console.log(setIter.next().value); // [1, 1]
console.log(setIter.next().value); // ["baz", "baz"]
效率说明
set对象和数组很像,但是它们之间的差异可能对 你的应用的性能产生影响,因为set对象是通过哈希表(或者具有类似哈希表效率的方法)来实现的。因此当您将某些东西存储在数组中时,可能必须遍历整个数组才能找到该项目,但是对于set对象,查询是瞬时的。
实际上,在大多数情况下,性能都可以忽略不计,但是如果您不得不跟踪大量数据的时候,可能使用set对象会比数组对象更好一点。
网友评论