JavaScript中的Set和Map

91 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第17天,点击查看活动详情

JavaScript中的Set和Map

Set

  • 介绍 Set对象允许你存储任何类型唯一的值,无论是原始值还是对象引用。

Set对象是值的集合,你可以按照插入的顺序迭代它的元素。Set 中的元素只会出现一次,即 Set 中的元素是唯一的。

因为Set当中所有的值都是唯一的,所以我们需要判断两个值是否相等,早ECMAScript早期的时候,Set的实现并没有基于和===相同的算法,简单来说,对于Set,+0-0是两个不相同的值,但是实际上他们是严格相等的。 这点在ECMAScript当中早已经更改了。

另外,NANundefinded都可以被存储在Set当中,并且NAN之间被视为相等的值,尽管严格来说,NAN != NAN

  • Set构造函数
//使用new关键字创建Set实例,并且传入一个数组进行初始化
const set = new Set([1,2,3,4,5,66]);

//打印输出一个迭代器数组,可以使用for in进行迭代
console.log(set.values())  // SetIterator [1,2,3,4,5,6]

上面我们使用Set对象创建了一个对象实例,并且对他进行了初始化。我们可以看出,最后打印的迭代数组并没有两个6

  • Set实例属性 Set.Prototype.size是Set实例对象上的一个属性,记录了当前Set实例对象当中存储的元素个数。
//获取当前Set对象当中存储的元素个数
console.log(set.size);  // 6
  • Set 方法
  • add add() 方法用来向一个 Set 对象的末尾添加一个指定的值。
//像当前set实例对象末尾添加一个元素
set.add(7);
		
console.log(set.values());// SetIterator [1,2,3,4,5,6,7]
  • clear clear() 方法用来清空一个 Set 对象中的所有元素。
// 将Set实例当中存储的最后一个元素取出
set.clear();
console.log(set.size);   // 0
  • delete delete() 方法可以从一个 Set 对象中删除指定的元素。
//返回值为boolear类型,删除成功为true,删除失败为false
console.log(set.delete());   // return false;
console.log(set.delete(6));  // return true;
  • entries entries() 方法返回一个新的迭代器对象 ,这个对象的元素是类似 [value, value] 形式的数组,value 是集合对象中的每个元素,迭代器对象元素的顺序即集合对象中元素插入的顺序。
const setEntries =  set.entries();

console.log(setEntries); // SetIterator [0: {1 => 1},1: {2 => 2},2: {3 => 3},3: {4 => 4},4: {5 => 5},5: {7 => 7}]
  • forEach forEach 方法会根据集合中元素的插入顺序,依次执行提供的回调函数。
  • has has() 方法返回一个布尔值来指示对应的值 value 是否存在 Set 对象中。
  • values values() 方法按照元素插入顺序返回一个具有 Set 对象每个元素值的全新 Iterator 对象。

keys() 方法是这个方法的别名(与 Map 对象相似);他们的行为一致,都是返回Set 对象中的元素值。