JavaScript之Set和Map数据结构

来源:互联网 发布:帝国cms用户密码忘记 编辑:程序博客网 时间:2024/05/18 15:54

set

ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。

Set 本身是一个构造函数,用来生成 Set 数据结构。

//例        const s = new Set();        [2, 3, 5, 4, 5, 2, 2].forEach(x => s.add(x));        for (let i of s) {          console.log(i); //2,3,5,4        }//Set 函数可以接受一个数组(或类似数组的对象)作为参数,用来初始化。        const set = new Set([1, 2, 3, 4, 4]);

同时还可以利用set没有重复的值这一特性, 实现数组去重.

var arr = [1,1,2,2,3,3];var s = new Set(arr);s.size;//3console.log([...s]);//1,2,3;//Array.form方法可以将 Set 结构转为数组。const items = new Set([1, 2, 3, 4, 5]);const arr = Array.from(items);//另一种数array组去重的方法function dedupe(array) {  return Array.from(new Set(array));}dedupe([1, 1, 2, 3])

Set 结构的实例有以下属性。

  • Set.prototype.constructor:构造函数,默认就是Set函数。
  • Set.prototype.size:返回Set实例的成员总数。

四个操作方法。

  • add(value):添加某个值,返回Set结构本身。
  • delete(value):删除某个值,返回一个布尔值,表示删除是否成功。
  • has(value):返回一个布尔值,表示该值是否为Set的成员。
  • clear():清除所有成员,没有返回值。

Set的遍历

Set 结构的实例有四个遍历方法,可以用于遍历成员。

  • keys():返回键名的遍历器
  • values():返回键值的遍历器
  • entries():返回键值对的遍历器
  • forEach():使用回调函数遍历每个成员

由于 Set 结构没有键名,只有键值(或者说键名和键值是同一个值),所以keys方法和values方法的行为完全一致。
Set结构的实例的forEach方法,用于对每个成员执行某种操作,没有返回值。


Map

JavaScript 的对象(Object),本质上是键值对的集合(Hash 结构),但是传统上只能用字符串当作键。这给它的使用带来了很大的限制。

为了解决这个问题,ES6 提供了 Map 数据结构。它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。也就是说,Object 结构提供了“字符串—值”的对应,Map结构提供了“值—值”的对应,是一种更完善的 Hash 结构实现。如果你需要“键值对”的数据结构,Map 比 Object 更合适

//例var m = new Map([[{a:1}, 1], ["aa", 2]]);console.log(m);

这里写图片描述

Map初始化方法

//Set和Map都可以用来生成新的 Map。const set = new Set([  ['foo', 1],  ['bar', 2]]);const m1 = new Map(set);//set形式const m2 = new Map([['baz', 3]]);//二维数组形式const m3 = new Map(m2);//map形式// 如果对同一个键多次赋值,后面的值将覆盖前面的值。const map = new Map();map.set(1, 'aaa').set(1, 'bbb');console.log(map);//1=>bbb

Map属性和操作方法

Map 结构的实例有以下属性和操作方法。

属性/方法 作用 size属性 size属性返回 Map 结构的成员总数。 set(key, value) set方法设置键名key对应的键值为value,然后返回整个 Map 结构。如果key已经有值,则键值会被更新,否则就新生成该键。set方法返回的是当前的Map对象,因此可以采用链式写法。 get(key) get方法读取key对应的键值,如果找不到key,返回undefined。 has(key) has方法返回一个布尔值,表示某个键是否在当前 Map 对象之中。 delete(key) delete方法删除某个键,返回true。如果删除失败,返回false。 clear() clear方法清除所有成员,没有返回值。

Map遍历方法

遍历方法
Map 结构原生提供三个遍历器生成函数和一个遍历方法。

  • keys():返回键名的遍历器。
  • values():返回键值的遍历器。
  • entries():返回所有成员的遍历器。
  • forEach():遍历 Map 的所有成员。
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 车牌换了原保险怎么办 北京车牌夫妻变更车险怎么办 赌博拘留15天不交罚款怎么办 给人打了不赔钱怎么办 打了人对方讹钱怎么办 换车了原来的etc怎么办 换异地车牌了etc怎么办 被执行人拘留15天后不还钱怎么办 被执行人拘留后还是不还钱怎么办 摩托车套牌被交警扣了怎么办 套牌摩托车遇到交警怎么办 不知情收到小偷东西了怎么办 盗窃罪法院判定农民赔钱没钱怎么办 公安局通知家属取刑拘通知书怎么办 老公诈骗坐牢家人该怎么办 家人被拘留我该怎么办 车牌被偷了一个怎么办 车牌给人家偷了怎么办 收购了偷来的铝怎么办 员工自动离职后档案怎么办 辞职了老板不发工资怎么办 上班老板不发工资怎么办 逮捕后延长羁押期限怎么办手续 员工提出辞职公司不同意怎么办 员工提出辞职后即不来上班怎么办 打架把对方打成轻伤害怎么办 被刑拘了家人该怎么办 看守所在押人员检查出乙肝怎么办 孩子不写作业老师该怎么办 孩子老师向我表白该怎么办 幼儿园老师打孩子家长该怎么办 老师对孩子太苛刻该怎么办 孩子不敢上学怕老师该怎么办 学生上课迟到老师该怎么办 看守所转监狱不收怎么办 己判实刑有病看守所不收怎么办 判决书生效前看守所不收怎么办 法院判实刑看守所不收怎么办 派出所立案后送拘留所了怎么办 打架斗殴被关在看守所了怎么办 在看守所羁押期间患癌症怎么办