在JavaScript中,Set
是一种特殊的类型,它允许你存储唯一的值,无论是原始值或者是对象引用。Set
对象保存值的唯一性是通过其内部算法来实现的,当你向Set
中添加一个新值时,它都会检查该值是否已经存在于集合中。
new Set()
来创建一个新的空集合,或者传入一个可迭代对象(如数组)来初始化集合。add(value)
方法可以向集合添加元素,使用delete(value)
方法可以从集合中删除元素。has(value)
方法可以检查集合中是否存在某个元素。size
属性可以获取集合中的元素数量。for...of
循环或者forEach
方法来遍历集合中的元素。Set
。// 创建一个Set
let mySet = new Set();
// 添加元素
mySet.add(1);
mySet.add(2);
mySet.add(2); // 重复添加,不会影响Set
// 删除元素
mySet.delete(1);
// 检查元素
console.log(mySet.has(2)); // 输出: true
// 获取大小
console.log(mySet.size); // 输出: 1
// 遍历Set
mySet.forEach(value => console.log(value)); // 输出: 2
// 从数组创建Set去重
let array = [1, 2, 2, 3, 4, 4, 5];
let uniqueArray = [...new Set(array)]; // [1, 2, 3, 4, 5]
问题:如何将Set转换为数组?
解决方法:可以使用扩展运算符...
或者Array.from()
方法。
let set = new Set([1, 2, 3]);
let array = [...set]; // 或者 let array = Array.from(set);
问题:Set中的对象是如何判断唯一性的?
解决方法:Set中的对象唯一性是基于引用而不是值。即使两个对象具有相同的属性和值,它们也被认为是唯一的,除非它们引用的是内存中的同一个对象。
let set = new Set();
let obj1 = { firstName: "John", lastName: "Smith" };
let obj2 = { firstName: "John", lastName: "Smith" };
set.add(obj1);
set.add(obj2); // Set中会有两个元素,因为obj1和obj2是不同的引用
如果你需要基于对象的值来判断唯一性,你可能需要自定义逻辑或者使用Map
结构配合特定的键值。
领取专属 10元无门槛券
手把手带您无忧上云