javascript中的set的用法

在 JavaScript 中,Set 是一种内置的数据结构,用于存储唯一值的集合。Set 对象允许你存储任意类型的值,无论是基本类型还是对象类型。以下是 Set 的常用方法和操作:

1. 创建一个 Set:

你可以通过 new Set() 来创建一个新的 Set 对象。
 

const mySet = new Set();

2. 向 Set 中添加元素:

使用 .add() 方法可以向 Set 中添加元素。

mySet.add(1);       // Set { 1 }
mySet.add(5);       // Set { 1, 5 }
mySet.add(1);       // Set { 1, 5 } (1 已经存在,不会重复添加)
mySet.add('hello'); // Set { 1, 5, 'hello' }

3. 检查 Set 中是否存在某个值:

使用 .has() 方法来检查一个值是否在 Set 中。

console.log(mySet.has(1));    // true
console.log(mySet.has(10));   // false

4. 删除 Set 中的元素:

使用 .delete() 方法可以删除某个元素。

mySet.delete(5);    // true
console.log(mySet); // Set { 1, 'hello' }

5. 获取 Set 的大小:

使用 .size 属性可以获得 Set 的元素数量。

console.log(mySet.size); // 2

6. 清空 Set:

使用 .clear() 方法可以清空 Set 中的所有元素。

mySet.clear();
console.log(mySet.size); // 0

7. 遍历 Set:

你可以使用 forEach()for...of 循环来遍历 Set

PS:[1, 2, 3, 'a', 'b']为一个数组。

const anotherSet = new Set([1, 2, 3, 'a', 'b']);

// 使用 forEach 遍历
anotherSet.forEach(value => {
  console.log(value);
});

// 使用 for...of 遍历
for (let value of anotherSet) {
  console.log(value);
}

8. Set 和数组的转换:

你可以很容易地将 Set 转换为数组,或者将数组转换为 Set

// Set 转换为数组
const setArray = [...anotherSet]; // [1, 2, 3, 'a', 'b']

// 数组转换为 Set
const array = [1, 2, 2, 3, 4];
const arraySet = new Set(array); // Set { 1, 2, 3, 4 }

9. 去重数组中的重复值:

利用 Set 的唯一性,你可以快速去除数组中的重复项。

const numbers = [1, 2, 3, 3, 4, 5, 5];
const uniqueNumbers = [...new Set(numbers)]; // [1, 2, 3, 4, 5] 首先将数据转换为set,再将set转换为数组。

set和map的区别:

1. 存储类型

  • Set只存储唯一值,不存储键值对。每个元素都是一个值,且不能重复。

    const mySet = new Set(); 
    mySet.add(1); 
    mySet.add(2); 
    mySet.add(2); // 无法添加重复的值 
    console.log(mySet); // Set { 1, 2 }

  • Map:存储的是键值对。每个元素都有一个键和一个对应的值,键可以是任何类型(包括对象)。

    const myMap = new Map(); 
    myMap.set('key1', 'value1'); 
    myMap.set('key2', 'value2'); 
    console.log(myMap); // Map { 'key1' => 'value1', 'key2' => 'value2' }

2. 元素的唯一性

  • Set:不能存储重复的值。Set 会确保集合中的每个元素都是唯一的。

    const set = new Set([1, 1, 2, 3]); 
    console.log(set); // Set { 1, 2, 3 } (1 不会重复)

  • Map键必须是唯一的,但不同的键可以对应相同的值。Map 中允许重复的值,只要键不同。

    const map = new Map(); 
    map.set('a', 1); 
    map.set('b', 1); // 相同的值,键不同 
    console.log(map); // Map { 'a' => 1, 'b' => 1 }

3. 键和值的使用

  • Set:只有值,没有键。每个值在 Set 中都是唯一的元素。

    const set = new Set([1, 2, 3]); 
    set.forEach(value => console.log(value)); // 遍历的是值

  • Map:每个元素都有键和值,使用 .set(key, value) 来添加键值对,用 .get(key) 来获取对应的值。

    const map = new Map(); 
    map.set('name', 'Alice'); 
    map.set('age', 30); 
    console.log(map.get('name')); // 'Alice'

4. 迭代

  • Set:遍历 Set 时,你只能遍历值。

    const set = new Set([1, 2, 3]); 
    for (let value of set) { 
      console.log(value); // 1, 2, 3 
    }

  • Map遍历 Map 时可以遍历键、值或者键值对。

    const map = new Map([['key1', 'value1'], ['key2', 'value2']]); // 遍历键 
    for (let key of map.keys()) { 
      console.log(key); // key1, key2 
    } // 遍历值 
    for (let value of map.values()) { 
      console.log(value); // value1, value2 
    } // 遍历键值对 
    for (let [key, value] of map.entries()) { 
      console.log(key, value); // key1 value1, key2 value2 
    }

5. 方法

  • Set

    • .add(value):向 Set 中添加值。
    • .delete(value):删除 Set 中的值。
    • .has(value):检查 Set 中是否有某个值。
    • .clear():清空 Set
    • .size:获取 Set 的大小。
  • Map

    • .set(key, value):向 Map 中添加键值对。
    • .get(key):通过键获取对应的值。
    • .delete(key):删除某个键值对。
    • .has(key):检查 Map 中是否有某个键。
    • .clear():清空 Map
    • .size:获取 Map 的大小。

6. 使用场景

  • Set:适用于处理唯一值集合的场景,如数组去重、存储一组无重复的值。

    const uniqueValues = new Set([1, 2, 2, 3, 4]); // Set { 1, 2, 3, 4 }

  • Map:适用于需要键值对存储的场景,如缓存、字典、关联数组等。

    const dictionary = new Map(); 
    dictionary.set('apple', 'A fruit'); 
    dictionary.set('car', 'A vehicle');

总结:

  • Set 用于存储唯一的值集合,没有键。
  • Map 用于存储键值对,键和值都可以是任意类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值