• Set和Map数据


    es6新的数据结构

    1.Set:构造函数

    const s = new Set ([1,2,3]);
    console.log(s)//Set(3){1,2,3};
    [...s];//[1,2,3]
    console.log(s);//
    Set(3){1,2,3};
    s.add(4);//Set(4){1,2,3,4};
    s.size;//4;
    s.has(1);//true
    s.delete(2);
    s.clear();//Set(0){}

    用于数组去重

    let arr=[1,2,1];
    arr = [...Set(arr)]//[1,2]
    //Set里NaN与NaN相等
    let set = new Set();
    set.add(NaN);
    set.add(NaN);
    set.size//1

    Set遍历操作

    keys():返回键名的遍历器

    values():返回键值的遍历器

    entries():返回键值对的遍历器

    forEach():使用回调函数遍历成员

    //keys():
    let set = new Set([11,2,3,4]);
    for(let item of set.keys()){
        console.log(item)
    }
    //11,2,3,4
    //values():
    for (let val of set.values()){
        console.log(val)
    }
    //11,2,3,4
    //entries():
    for (let item of set.entries()){
         console.log(item)  
    }
    //[11,11];[2,2];....
    //forEach
    set.forEach((val)=>{console.log(val)})

    还可以使用for... of

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

    Map:可以使用非字符串作为键

    //对象只允许使用字符串作为键;否则
    var obj={a:1,b:2};
    var ar={};
    ar[obj]=2;
    console.log(ar);//{[object Object]: 2}
    //Map
    const map=new Map();
    map.set(NaN,123);
    map.get(NaN);//123
    //undefined和null不相等 map.set(obj,
    2);//key:{name: "joe", say: ƒ};value:2 map.get(obj);//2 map.has(obj);/true map.delete(obj);//true map.delete(ofo);//报错 map.delete(ar);//false
    map.clear();
    map.size//0
    //数组生成新的map
    const mvp = new Map(['name','joe'],['title','silence']);
    mvp.size;//2
    mvp.has('name')//true
    mvp.get('name')//joe
    //Set和Map生成新的Map
    const set = new Set([['foo',1],['bar',2]]);
    const m1 = new Map(set);
    m1.get('foo')//1

     遍历方法

    const map = new Map ([['name','joe'],['say','hello']]);
    //keys()
    for (let key of map.keys()){
        console.log(key)//name;say
    }
    //values()
    //entries()
    for (let item of map.entries()){
        console.log(item)//会把键和值放在一个数组里
    }
    //forEach
    map.forEach()

     Map转为数组结构

    const map=new Map([
        [1,'0ne'],
        [2,'two'],
        [3,three]
    ])
    [...map.keys]
    [...map.values]
    [...map.entries]
    [...map)

    Map和数组方法

    const map0 = new Map()
        .set(1,'a')
        .set(2,'b')
        .set(3,'c');
    const map1=map0.filter(([key,value])=>{
        return key>2
    })
    类比使用数组map方法
    const map=new Map([['e1','a'],['e2','b']])
    map.forEach(function(value, key, map) {
      console.log("Key: %s, Value: %s", key, value);
    });//Key: e1, Value: a;Key: e2, Value: b

    forEach接收第二个参数用来绑定this

    const reporter={
        report:function(key,value){
            console.log("Key:%s,Value:%s",key,value);
        }
    }
    const map=new Map([['e1','a'],['e2','b']]);
    map.forEach(function(value,key,map){
        this.report(key,value)
    },reporter)
    //声明一个对象reporter里面包含着对map遍历的变量的处理,在对map进行forEach遍历的时候,传入第二个变量即reporter,可以在forEach函数中使用this.reporter对其中的变+量进行处理

    Map转换

    //Map转为数组
    const map= new Map()
        .set('e1',2)
        .set({foo:3},['abc']);
    [...myMap]//[['e1',2],[{foo:3},['abc']]]
    //数组转Map
    const map=new Map([[1,2],[2,3]])
    //Map转为对象
    function strMapToObj(strMap) {
      let obj = Object.create(null);
      for (let [k,v] of strMap) {
        obj[k] = v;
      }
      return obj;
    }
    
    const myMap = new Map()
      .set('yes', true)
      .set('no', false);
    strMapToObj(myMap)
    // { yes: true, no: false }
    //对象转为Map
    function objToStrMap(obj) {
      let strMap = new Map();
      for (let k of Object.keys(obj)) {
        strMap.set(k, obj[k]);
      }
      return strMap;
    }
    
    objToStrMap({yes: true, no: false})
  • 相关阅读:
    【读书笔记】构建之法(CH7~CH8)
    【课后作业】软件创新
    【个人开发】词频统计
    【读书笔记】没有银弹
    【个人开发】词频统计-代码规范
    【个人开发】词频统计-文档设计
    GitBook 使用
    Android NDK 入门与实践
    Python 爬虫实战(一):使用 requests 和 BeautifulSoup
    手把手教你做个人 app
  • 原文地址:https://www.cnblogs.com/shui1993/p/9266451.html
Copyright © 2020-2023  润新知