ES6中set,map详述

本文深入探讨了JavaScript中Set和Map数据结构的使用方法及特性,包括创建、遍历、去重、集合运算等关键操作,同时对比了它们与数组和对象的区别。

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

一、set

set相当于一种类似于数组的数据结构,不过set中成员的值是唯一的,有很多内置的方法。set中的方法,常用的有set.size,用于获取set的长度;add()用于添加一个成员;delete()用于删除set中的一个值;clear()用于清空set内的所有值;has()可以用于判断一个值是否该set中的成员,返回true/false.filter()过滤方法。

创建一个新的set:

方式一:

 const set = new Set();
 set.add(2).add('2').add(4);

方式二:

var arr = [1,2,3,4,2,4,5,2,1,4,5,5,7];
const set2 = new Set(arr);

方式三:

const set3 = new Set();
[2,34,2,4,5,2,4].forEach(item => set3.add(item));

set中的方法,常用的有set.size,用于获取set的长度;add()用于添加一个成员;delete()用于删除set中的一个值;clear()用于清空set内的所有值;has()可以用于判断一个值是否该set中的成员,返回true/false.

利用set来进行对数组的去重操作:

方法一:

 var arr = [1,2,3,4,2,4,5,2,1,4,5,5,7];
console.log([...new Set(arr)]);

方法二:

var arr2 = new Set([1,2,3,4,2,4,5,2,1,4,5,5,7]);
var arr3 = Array.from(arr2);

遍历一个set可以用for...of...  也可以用for..in...

对于for k in K 循环,对象中获取的是key,数组中获取的是索引

var arr = [1,2,3,4,5];
for(var v in arr){
    console.log(v)   //01234索引  console.log(arr[v])  1,2,3,4,5
};

 而for v of V,获取的则是当前的值value

var arr2 = new Set([1,2,3,4,2,4,5,2,1,4,5,5,7]);
 for(let v of arr2){
   console.log(v);
};

在遍历方法中,keys()获取的是键,value()获取的是值,entries()获取的是键值对。

filter()  过滤方法,利用filter()可以实现获取两个set集合的并集,交集,差集。。

//获取交集
var arr1 = new Set([1,2,3,4,2,4,5,2,1,4,5,5,7]);
var arr2 = new Set([9,5,2,4,8]);
var arr3 = new Set([...arr1].filter(item => arr2.has(item)));  // 2 4 5
//并集
var arr4 = new Set([...arr1,...arr2]);
//差集
var arr1 = new Set([1,2,3,4,2,4,5,2,1,4,5,5,7]);
var arr2 = new Set([9,5,2,4,8]);
var arr3 = new Set([...arr1].filter(item => !arr2.has(item)));  //1 3 7
var arr3 = new Set([...arr2].filter(item => !arr1.has(item)));  //9 8

二、map

map这种数据结构类似于对象,但不是对象,采用键值对的方式,但是键可以是任意类型而不局限于字符串。

var m = new Map([['name','a'],['age',10],['a',3]]);
 //keys()   value()  entries()
for(let [k,v] of m){
  console.log(v)
};
for(let k of m.keys()){
   console.log(k)
};
for(let v of m.values()){
   console.log(v)
 };

同样的,map可以使用扩展运算符:

var m2 = [...m.keys()];此时,m2将是由m中所有键组成的数组。也可以直接[...m]将m转化为一个数组。

那么,map和对象之间怎么互相转化呢?

        var m = new Map([['name','a'],['age',10],['a',3]]);
        var obj = {};
        for(let [k,v] of m){
            obj[k] = v;
        };
        console.log(obj);
        //对象转为map
        var obj2 = {msg:'hello',flag:true};
        var m = new Map();
        for(let k in obj2){
            m.set(k,obj2[k])
        };

需要注意的是for...of...是不能遍历对象的,如果想用for...of方法遍历则需要先利用Object.keys()将数组中的键组成一个数组,在进行for...of遍历:

		function objToStrMap(obj) {
		  let m = new Map();
		  for (let k of Object.keys(obj)) {    //name value   for...of 不能遍历对象
			m.set(k, obj[k]);
		  }
		  return m;
		};
		objToStrMap({name:1, value:2});

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值