ES6知识点-Map和Set

3.8Map和Set数据结构

3.8.1Set 数据结构

  • 类似于数组,但是成员的值都是唯一的,没有重复的值。
  • Set本身是一个构造函数,用来生成Set数据结构。
  • Set函数可以接受一个数组(或类似数组的对象)作为参数,用来初始化。
  • 定义的set对象会自己去除重复的值
  • 用途:用它来对数组进行去重
  • Set加入值的时候,不会发生类型转换,所以5和"5"是两个不同的值。
  • Set内部判断两个值是否不同类似于精确相等运算符(===),主要的区别是NaN等于自身,而精确相等运算符认为NaN不等于自身。
  • Set中两个对象总是不相等的,即便它们是空对象。
    //1 接收数组作为参数
    var set = new Set([1, 2, 3, 3, 4, 4]);
    
    //2 数组去重
    var arr=[1, 2, 2, 3, 4, 4];        // 定义一个数组
    var set = new Set(arr);
    //方法一:使用扩展运算符Set结构转为数组
    var  newArr=[...set];
    //方法二:使用Array.from方法将Set结构转为数组
    var  newArr=Array.from(set);
    
    var  newArr=new Set([5,"5"])
    newArr    // Set { 5, '5' }
    var  newArr=new Set([{},{}])
    newArr    //  Set { {}, {} }

3.8.2Set实例的属性和方法

  • 属性

    • Set.prototype.constructor:构造函数,默认就是Set函数。
    • Set.prototype.size:返回Set实例的成员总数
  • 方法
    • 操作方法(用于操作数据)

      • add(value):添加某个值,返回Set结构本身。
      • delete(value):删除某个值,返回一个布尔值,表示删除是否成功。
      • has(value):返回一个布尔值,表示该值是否为Set的成员。
      • clear():清除所有成员,没有返回值。
        var s=new Set();        // 定义s 数据类型为Set
        s.add(1).add(2).add(2);        // 使用add方法添加值,重复值不会被添加
        s.size             // 2      注意2被加入了两次,但是去重了一个,所以s的成员数是2
        s.has(1)         // true       使用has方法判断是否有该值,有所以返回true
        s.has(2)         // true
        s.has(3)         // false        没有该值返回false
        s.delete(2);        // 使用delete删除该值
        s.has(2)        // false    因为2被上面删除了,所以没该值,返回false
    • 遍历方法(用于遍历成员) Set的遍历顺序就是插入顺序
      • keys():返回键名的遍历器。
      • values():返回键值的遍历器,可以省略。
      • entries():返回键值对的遍历器。
      • forEach():使用回调函数遍历每个成员,它的参数是函数
      var set = new Set(['red', 'green', 'blue']);        // 定义一个Set对象
      
      for (let item of set.keys()) {
        console.log(item);
      }
      // red
      // green
      // blue
      
      for (let item of set.values()) {
        console.log(item);
      }
      // red
      // green
      // blue
      
      for (let item of set.entries()) {
        console.log(item);
      }
      // ["red", "red"]
      // ["green", "green"]
      // ["blue", "blue"]
      
      set.forEach(function(key,value){
          console.log(key,value)
      })
      // red red
      // green green
      // blue blue

3.8.3Map结构的目的和基本用法

  • 对象(Object),本质上是键值对的集合(Hash结构),但是传统上只能用字符串当作键
  • Map类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。
  • 作为构造函数,Map也可以接受一个数组作为参数。该数组的成员一个个表示键值对的数组
  • 如果对同一个键多次赋值后面的值将覆盖前面的值
    var m = new Map();
    var o = {p: 'welcome to w3cschool'};    // 使用对象做键
    m.set(o, 'content')
    m.get(o)     // "content"
    
    m.has(o)     // true
    m.delete(o)     // true
    m.has(o)     // false
    
    var map = new Map([
      ['name', 'jack'],
      ['age', 12]
    ]);
    map.size      // 2
    map.has('name')       // true
    map.get('name')       // "jack"
    map.has('age')        // true
    map.get('age')        // "12"
    
    map .set(1, 'aaa') .set(1, 'bbb');        // 结果是 bbb的值

3.8.4实例的属性和操作方法

(1)size属性

size属性返回Map结构的**成员总数**。

(2)set(key, value)

set方法**设置key所对应的键值**,然后返回整个Map结构。如果key已经有值,则键值会被更新,否则就新生成该键。

(3)get(key)

get方法**读取**key对应的键值,如果找不到key,返回undefined。

(4)has(key)

has方法返回一个布尔值,表示某个键**是否在Map数据结构中**。

(5)delete(key)

delete方法**删除某个键**,返回true。如果删除失败,返回false。

(6)clear()

clear方法清**除所有成员**,没有返回值。
var map=new Map();

map.set('foo', true);       // 设置
map.size;     // 1
map.get('foo');     // true
map.has('foo')          // true
map.delete('foo');       // 删除map对象的foo键,删除后使用has返回false
map.clear()        // 删除map对象所有的键

3.8.5Map遍历方法

  • keys():返回键名的遍历器。
  • values():返回键值的遍历器。
  • entries():返回所有成员的遍历器。
  • forEach():遍历Map的所有成员。

3.8.6数据结构的互相转换

(1)Map转为数组

? Map转为数组最方便的方法,就是使用扩展运算符(...)

(2)数组转为Map

? 将数组转入Map构造函数,就可以转为Map。

(3)Map转为对象

? 如果所有Map的键都是字符串,它可以转为对象

(4)对象转为Map

5)Map转为JSON

  • 一种情况是Map的键名都是字符串,这时可以选择转为对象JSON。
  • 另一种情况是Map的键名有非字符串,这时可以选择转为数组JSON。

    (6)JSON转为Map

    JSON转为Map,正常情况下,所有键名都是字符串。

    //(1)Map转为数组
    [...myMap]        //  myMap表示Map数据
    //(2)数组转为Map
    new Map(数组)
    // (3)Map转为对象
    function cMapToObj(strMap) {
      let obj = Object.create(null);
      for (let [k,v] of strMap) {
        obj[k] = v;
      }
      return obj;
    }
    cMapToObj(myMap)
    //(4)对象转为Map
    function objToMap(obj) {
      let strMap = new Map();
      for (let k of Object.keys(obj)) {
        strMap.set(k, obj[k]);
      }
      return strMap;
    }
    objToMap(对象)
    //(5)Map转为JSON  对象json
    JSON.stringify(cMapToObj(myMap))    // cMapToObj是上面定义的函数
    //(5)Map转为JSON  数组json
    JSON.stringify([...myMap])
    //(6)JSON转为Map
    objToMap(JSON.parse( json数据 ))        // objToMap是上面定义的函数

原文地址:https://www.cnblogs.com/xuzhengguo/p/12041186.html

时间: 2024-10-21 01:56:23

ES6知识点-Map和Set的相关文章

[ES6] 18. Map

ES6 provides Map, it is a set of k-v pair. Key can be number, string, object, function and even undefined. var m = new Map(); Methods: 1. set(k,v) m.set("edition", 6) // 键是字符串 m.set(262, "standard") // 键是数值 m.set(undefined, "nah&q

es6的map()方法解释

es6的map()方法解释 map方法的作用不难理解,即“映射”,也就是原数组被“映射”成对应新数组.下面这个例子是数值项求平方: var data = [1, 2, 3, 4]; var arrayOfSquares = data.map(function (item) { return item * item; }); alert(arrayOfSquares); // 1, 4, 9, 16 callback需要有return值,如果没有,就像下面这样: var data = [1, 2,

ES6知识点整理之----数组扩展----API新增

Array.from() 用于将两类对象转为真正的数组:类似数组的对象(array-like object)和可遍历(iterable)的对象(包括 ES6 新增的数据结构 Set 和 Map). 只要是部署了 Iterator 接口的数据结构,Array.from都能将其转为数组. 任何有length属性的对象,都可以通过Array.from方法转为数组,而扩展运算符就无法转换. Array.from还可以接受第二个参数,作用类似于数组的map方法,用来对每个元素进行处理,将处理后的值放入返回

ES6中map数据结构学习

在项目中遇到一个很恶心的需求,然后发现ES6中的map可以解决,所以简单学习了一下map. Javascript的Object本身就是键值对的数据结构,但实际上属性和值构成的是“字符串-值”对,属性只能是字符串,如果传个对象字面量作为属性名,那么会默认把对象转换成字符串,结果这个属性名就变成“[object Object]”:. ES6提供了“值-值”对的数据结构,键名不仅可以是字符串,也可以是对象.它是一个更完善的Hash结构. 1.键值对,键可以是对象 const map1 = new Ma

了解ES6的Map数据结构

<script> /* Map数据结构是ES6推出的,它是一个类对象,普通对象的键值只能使用string,而map数据结构的键值可以使用任意对象,不受限制 Map是一个构造函数,通过new Map() 来构建 如果需要键值对的数据格式,Map比Object更加适合 如果对同一个键进行重复赋值,那么前面的值会被后替换 拥有于set数据结构同样的遍历方法,遍历的顺序就是数据插入的顺序 转化为数组结构可以使用展开运算符 ... */ let map = new Map([ [{a:'a'},123]

ES6的Map 和Set

集合的概念以及和数组的区别 其实数组也是集合, 只不过数组的索引是数值类型.当想用非数值类型作为索引时, 数组就无法满足需要了. 而 Map 集合可以保存多个键-值对(key-value), Set 集合可以保存多个元素. 对Map 和 Set 一般不会逐一遍历其中的元素. Map 一般用来存储需要频繁取用的数据, Set 一般用来判断某个值是否存在其中. ES 5 中对 Map 和 Set 的模拟方法 在ES 5 中,没有 Set和Map集合, 一般使用对象来模拟这两种集合, 对象的属性作为键

学些ES6:Map

Map: 初始化: const mapSize = (new Map()).size; // mapSize: 0 const pair1 = [1, 'one']; const pair2 = [2, 'two']; const map = new Map([pair1, pair2]); // new Map().set(...pair1).set(...pair2); // 以最后设的值为准: const pair1 = [1, 'one']; const pair2 = [1, 'uno

ES6——数据结构 Map

数据结构 Map 字典: 用来存储不重复key的 Hash结构.不同于集合(Set)的是,字典使用的是 [键,值] 的形式来存储数据的. JavaScript 的对应那个(Object:{}) 只能用字符串当做键.这给他的使用带来了很大的限制. var data1={a:"1"},data2={b:"2"},obj={}; obj[data1]=1; obj[data2]=2; console.log(obj); 1.创建一个 Map const map=new M

ES6知识点整理之第5篇----声明变量总结与global

1.ES6声明变量的6种方法: var function let const import class 2.ES5 的顶层对象,在各种实现里面是不统一的. 浏览器里面,顶层对象是window,但 Node 和 Web Worker 没有window. 浏览器和 Web Worker 里面,self也指向顶层对象,但是 Node 没有self. Node 里面,顶层对象是global,但其他环境都不支持. 现在有一个提案,在语言标准的层面,引入global作为顶层对象.也就是说,在所有环境下,gl