• 7.Map和Set


    Map 对象

    Map 对象保存键值对。任何值(对象或者原始值) 都可以作为一个键或一个值。

    let map = new Map();
    map.set('name','张三');
    map.set('age',20);
    console.log(map);
     //Map(2) {"name" => "张三", "age" => 20}

    Maps 和 Objects 的区别

    • 一个 Object 的键只能是字符串或者 Symbols,但一个 Map 的键可以是任意值。
    • Map 中的键值是有序的(FIFO 原则),而添加到对象中的键则不是。
    • Map 的键值对个数可以从 size 属性获取,而 Object 的键值对个数只能手动计算。
    • Object 都有自己的原型,原型链上的键名有可能和你自己在对象上的设置的键名产生冲突。

    Map 中的 key

    key 是字符串

    var myMap = new Map();
    var keyString = "a string"; 
     
    myMap.set(keyString, "和键'a string'关联的值");
     
    myMap.get(keyString);    // "和键'a string'关联的值"
    myMap.get("a string");   // "和键'a string'关联的值"
                             // 因为 keyString === 'a string'

    key 是对象

    var myMap = new Map();
    var keyObj = {}, 
     
    myMap.set(keyObj, "和键 keyObj 关联的值");
    
    myMap.get(keyObj); // "和键 keyObj 关联的值"
    myMap.get({}); // undefined, 因为 keyObj !== {}
    key 是函数
    
    var myMap = new Map();
    var keyFunc = function () {}, // 函数
     
    myMap.set(keyFunc, "和键 keyFunc 关联的值");
     
    myMap.get(keyFunc); // "和键 keyFunc 关联的值"
    myMap.get(function() {}) // undefined, 因为 keyFunc !== function () {}

    key 是 NaN var myMap = new Map(); myMap.set(NaN, "not a number"); myMap.get(NaN); // "not a number" var otherNaN = Number("foo"); myMap.get(otherNaN); // "not a number"
    虽然 NaN 和任何值甚至和自己都不相等(NaN !== NaN 返回true),NaN作为Map的键来说是没有区别的。

    Map 的迭代

    1.for...of
    
    for (var [key, value] of myMap) {
      console.log(key + " = " + value);
    }
    
    2.forEach()
    var myMap = new Map();
    myMap.set(0, "zero");
    myMap.set(1, "one");
     
    // 将会显示两个 logs。 一个是 "0 = zero" 另一个是 "1 = one"
    myMap.forEach(function(value, key) {
      console.log(key + " = " + value);
    }, myMap)
    

    Map 对象的操作

    map.has('name');//true
    map.delete('name');
    map.clear();
    console.log(map);
    map.set(['a',[1,2,3]],'hello');
    console.log(map);
                 
    

    Set 对象

    集合:表示无重复值的有序列表
    var mySet = new Set([1, 2, 3, 4, 4]); [...mySet]; // [1, 2, 3, 4]

    并集

      var a = new Set([1, 2, 3]);
      var b = new Set([4, 3, 2]);
      var union = new Set([...a, ...b]); // {1, 2, 3, 4}

    交集

      var a = new Set([1, 2, 3]);
      var b = new Set([4, 3, 2]);
      var intersect = new
      Set([...a].filter(x => b.has(x))); // {2, 3}

    差集

      var a = new Set([1, 2, 3]);
      var b = new Set([4, 3, 2]);
      var difference = new
      Set([...a].filter(x => !b.has(x))); // {1}



    // 添加元素
    set.add(2);
    set.add('4');
    set.add('4');
    set.add(['hello','world',3]);
    // 删除元素
    set.delete(2);
    // 校验某个值是否在set中
    console.log(set.has('4'));
    console.log(set.size);

      

     

  • 相关阅读:
    遍历当前窗口名字
    Delphi获取其它进程窗口句柄的3种方法
    Delphi判断一个字符是否为汉字的最佳方法
    Delphi拷贝目录(含子目录)的方法
    贴一份用delphi修改注册表改网卡MAC地址的代码
    delphi的TFileStream 内存流
    Delphi的ListView自动排序
    Delphi中上指定进程(进程名)
    Delphi-IP地址的隐藏
    C# 简单线程实例
  • 原文地址:https://www.cnblogs.com/sunny666/p/12984458.html
Copyright © 2020-2023  润新知