set和map数据结构

本文介绍了JavaScript中的Set和Map数据结构,包括它们的特性(无序、唯一值、键值对、去重方式),操作方法(添加、删除、清空、大小、遍历)以及适用场景。Set适用于去重,Map适合键值对存储,强调了两者之间的区别。
摘要由CSDN通过智能技术生成

 set

1.set是一系列无序,没有重复值的集合

const s = new Set();  //新建空的set集合
        console.log(s); 

方法

添加值    s.add(1)

const s = new Set();
        s.add(1) //添加值
        s.add(2).add(3) //可以多次添加
        console.log(s);

删除值   s.delete(3)

const s = new Set();
        s.add(1) //添加值
        s.delete(1)  //删除值
        console.log(s);

清空所有值   s.clear()

const s = new Set();
        s.add(1) //添加值
        s.clear()  //清空所有的值
        console.log(s);

判断某个值是否在set里  s.has(1)

const s = new Set();
        s.add(1) //添加值
        console.log(s.has(1));  //判断某个值是否存在set里
        console.log(s);

获取set集合的长度  s.size

const s = new Set();
        s.add(1) //添加值
        s.add(2).add(3) //可以多次添加
        console.log(s.size); //获取set的长度

set构造函数的参数,参数是数组形式,并且会自动去重

const s = new Set([1, 2, 1]) //要以数组的形式传参
        console.log(s);  //输出1,2     set会自动去重

 set也可以创建这种形式,也必须体现出键值对,并且每个值都不重复

const s = new Set([
            ['name', 'zs'],
            ['sex', 18]
        ])

去重的判断必须是全等(===),但是NaN不同,Set中NaN等于NaN

map

map是键值对的集合

const m = new Map()  //新建一个map集合
        console.log(m);

方法

使用set添加新成员  m.set('name', 'alex')

如果键名已经存在,后添加的键值对会覆盖之前的 

const m = new Map()
        m.set('name', 'alex')  //添加新成员
        console.log(m);

根据键名获取map值   m.get('name')

如果获取的成员不存在返回undefined,否则返回获取到的值

const m = new Map()
        m.set('name', 'alex')
        console.log(m.get('name'));  //根据键名获取map值

删除值    m.delete('name')

如果删除的成员不存在,什么都不会发生,也不会报错

const m = new Map()
        m.set('name', 'alex')
        m.delete('name')  //根据键名删除对应的值
        console.log(m);

清空所有值    m.clear()

const m = new Map()
        m.set('name', 'alex')
        m.clear()   //清空所有值
        console.log(m);

获取map的长度  m.size

const m = new Map()
        m.set('name', 'alex')
        console.log(m.size);  //获取长度  里面只有一个额值所以长度为一

map构造函数的参数

只能传二维数组,并且必须体现键值对

const m = new Map([
            ['name', 'alex'],
            ['age', 18]
        ])

和对象不同的是对象一般用字符串当作键,但是基本数据类型和引用数据类型都可以当作键名

map里相同键名后面的会覆盖前面的

判断键名是否相等遵循全等(===),但NaN不同,NaN等于NaN

赋值不全等  m1!=m

        const m = new Map([
            ['name', 'alex'],
            ['age', 18],
        ])
        const m1 = new Map(m)  //把m复制给m1
        console.log(m1 === m);  //false

遍历forEach

map

 const m = new Map([
            ['name', 'alex'],
            ['age', 18],
        ])
        m.forEach(function (value, key, map) {
            console.log(value, key,map);  //分别输出值、键、map本身
        });

map  值和键以字符串形式输出 

 set

普通遍历

const s = new Set([1, 2, 'name', 3, 'age'])
        s.forEach(function (value, key, set) {
            console.log(value, key);   //分别输出值、健、set集合
        });

 遍历set集合里的数组

const s = new Set([
            ['name', 'zs'],
            ['sex', 18]
        ])
        s.forEach(function (value, key, set) {
            console.log(value, key, set);   //分别输出值、健、set集合
        });

set 值和键因为里面还套了一个数组所以以数组的形式输出

总结:

在需要key,value结构时,需要字符串以外的值做键时,要使用map提供的方法和属性时用map

数组或字符串去重时候,不需要通过下标访问,只需要遍历时,要使用set提供的方法和属性时用set

set和map的区别:

map是键值对,set是集合

map可以通过get方法获取值,set不能因为他只有值

map是二维数组,set是一维数组

set方法值是唯一的会根据值自动区重,map根据键名去重,值可以重复

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值