js高级——set和map

本文介绍了JavaScript中的Set和Map数据结构,它们是ES6为处理复杂数据而引入的轻量级存储形式,具有快速处理数据的优势。Set确保成员唯一,适合去除数组重复项;Map则允许非字符串作为键,方便为对象存储数据。虽然与传统数据结构兼容性有限,但在前端本地数据处理中有良好应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

随着程序需要处理的数据越来越多,结构越来越复杂,单一的存储形式不足以存储复杂的结构。

我们使用数组和对象来搭配,存储复杂的结构。

但是数组和对象本身很重(除了存储数据之外,还有非常多的属性、方法、继承关系.......)。

es6新增了两个数据结构,专门用来存储数据,结构很轻,处理数据速度很快。

但是,set、map太新,很多传统的传输数据的方式都暂不支持,因此,目前set和map仅仅用于前端本地数据处理。

set

set结构是es6新增的数据类型,类似数组,但是成员不能重复。

set结构是唯一性可以用来判断NaN。

set结构简单,遍历速度非常快。

	let s = new Set();

在定义时,可以接受任何遍历器接口的数据:

	let s = new Set([1,2,3,4,5]);

	let s = new Set('abcdef');

set结构的属性:

        .size        可以返回set结构的长度

set结构的方法:

        add(value)        新增

        delete(value)        移除

        has(value)        判断是否包含

        clear()        清除数据

set结构的遍历器

        keys()

        values()

        entries()

        forEach()

我们可以使用for of循环遍历es6的遍历器接口:

	for (let item of set) {
      console.log(item)
    }

直接遍历set,默认是遍历set.keys()接口。对于set结构,其key和value是相同的,所以keys和values也是相同的。

	for (let item of set.keys()) {
      console.log(item)
    }
	for (let item of set.values()) {
      console.log(item)
    }

entries接口提供复合结构:

	for (let item of set.entries()) {
      console.log(item)//[key,value]
    }
s.forEach(function (key, value, set) {
      console.log(a, b, c);//1,1,set
    })

forEach回调函数的参数:因为set结构没有key,所以,访问key实际上返回的是value。

set结构也可以用来做数组去重复:

	let arr = [1,2,3,4,5,3,4,5];
	let arr2 = [...new Set(arr)];

map

map结构是es6新增的用于替代对象存储数据的格式,它结构类似于对象,

但区别是,map结构的key不仅仅是字符串,还可以是其他格式,例如:对象。

//可以使用二维数组来初始化一个map结构。	
let m = new Map([['a',1],['b',2]]);

map结构的属性:

size 返回map结构的长度。

map结构的方法:

set(key,value)

get(key)

has(key)

delete(key)

clear()

map结构的遍历器方法:

keys()

values()

entries()

forEach()

	map.forEach(function (value, key, m) {
      console.log(m);
    })

set和map结构是es6新增的结构,用于存储和遍历大量数据,性能非常优异。但因为是es6新增的类型,所以,和es5的有些方法不兼容,使用要注意。

set和map都认为,NaN是相同的

什么情况下使用set和map结构:

1、数据量比较大时。

2、当我们需要数组成员不重复时,可以使用set替代数组。

3、当我们需要为程序中的一些对象存储数据时,可以使用map。

    const h1 = document.querySelector('h1');

    const map = new Map();

    map.set(h1, { a: 1, b: 2 });

    const data = map.get(h1);
    data.c = 3;
    console.log(map.get(h1))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值