在 JavaScript 中,集合(Set)是一种新的数据结构,它类似于数组,但是成员的值都是唯一的,没有重复的值。集合是无序的,这意味着集合中的元素没有特定的顺序。
集合的数据结构提供了一种存储唯一值的方式,无论是原始值还是对象引用。集合中的值是唯一的,这意味着你不能有重复的值。
JavaScript 中的集合是使用 Set
对象来实现的。
// 创建一个集合
let mySet = new Set();
// 添加元素
mySet.add(1);
mySet.add(2);
mySet.add(2); // 重复的元素不会被添加
// 集合中的元素
console.log(mySet); // 输出: Set { 1, 2 }
// 检查元素是否存在
console.log(mySet.has(1)); // 输出: true
console.log(mySet.has(3)); // 输出: false
// 删除元素
mySet.delete(1);
// 获取集合的大小
console.log(mySet.size); // 输出: 1
// 清空集合
mySet.clear();
console.log(mySet.size); // 输出: 0
// 从数组创建集合
let array = [1, 2, 2, 3, 4, 4, 5];
let uniqueArray = new Set(array);
console.log(uniqueArray); // 输出: Set { 1, 2, 3, 4, 5 }
集合是无序的,所以你不能依赖集合来保持元素的插入顺序。如果你需要保持顺序,可以考虑使用 Map
或者数组。
如果你需要保持元素的顺序并且去重,可以使用以下方法:
let orderedArray = [...new Set(array)];
console.log(orderedArray); // 输出: [1, 2, 3, 4, 5]
这里使用了扩展运算符 ...
来将集合转换回数组,同时保持了元素的唯一性和原始数组的顺序。
集合可以存储对象,但是需要注意的是,集合是通过引用而不是通过值来判断对象是否重复的。
如果你需要根据对象的属性来判断是否重复,你需要自定义逻辑来实现。
let objSet = new Set();
let obj1 = { firstName: 'John', lastName: 'Doe' };
let obj2 = { firstName: 'John', lastName: 'Doe' };
objSet.add(obj1);
objSet.add(obj2); // obj2 被添加,因为它是不同的对象引用
// 判断两个对象是否相等(根据属性)
function objectsAreEqual(obj1, obj2) {
return obj1.firstName === obj2.firstName && obj1.lastName === obj2.lastName;
}
// 自定义去重函数
function addUniqueObjects(set, obj) {
for (let item of set) {
if (objectsAreEqual(item, obj)) {
return; // 如果找到相等的对象,则不添加
}
}
set.add(obj);
}
addUniqueObjects(objSet, obj2); // obj2 不会被再次添加
console.log(objSet.size); // 输出: 1
在这个例子中,我们定义了一个 objectsAreEqual
函数来比较两个对象是否相等,并且定义了一个 addUniqueObjects
函数来添加唯一的对象到集合中。
领取专属 10元无门槛券
手把手带您无忧上云