• 集合类型


    Array  只允许数字索引,所以当要使用非数字索引时,得用 object
     
    ECMAScript 6  引入了新的集合类型 
     
    1、Sets     不能含有重复值得有序列表
    var items = new Set();
    items.add(5);
    items.add("5");
    
    console.log(items.size());    // 2
     
    如果有完全重复的数值,那么后面出现的将会被忽视,数据比较使用的是=== ,所以 5 和 "5"  不同
    var items = new Set();
    items.add(5);
    items.add("5");
    items.add(5);     // oops, duplicate - this is ignored
    
    console.log(items.size());    // 2
    可以用数组批量初始化:
    var items = new Set([1, 2, 3, 4, 5, 5, 5, 5]);
    console.log(items.size());    // 5
    检索:
    var items = new Set();
    items.add(5);
    items.add("5");
    
    console.log(items.has(5));    // true
    console.log(items.has(6));    // false
    删除:
    var items = new Set();
    items.add(5);
    items.add("5");
    
    console.log(items.has(5));    // true
    
    items.delete(5)
    
    console.log(items.has(5));    // false
    循环:
    var items = new Set([1, 2, 3, 4, 5]);
    
    for (let num of items) {
        console.log(num);
    }
    2、Maps    有序键值列表 
    以前都是使用对象,但是对象的键都会强制转化成 字符串, 例如:
    // element gets converted to a string
    var data = {},
        element = document.getElementById("my-div");
    
    data[element] = metadata;
    这里的 键 element  会被转化为 "[Object HTMLDivElement]"
    使用 Maps 的话,键和值可以为任意的数据类型:
    var map = new Map();
    map.set("name", "Nicholas");
    map.set(document.getElementById("my-div"), { flagged: false });
    
    // later
    var name = map.get("name"),
        meta = map.get(document.getElementById("my-div"));
    和sets 有很多共同方法 :
    var map = new Map([ ["name", "Nicholas"], ["title", "Author"]]);
    使用:
    for (let key of map.keys()) {
        console.log("Key: %s", key);
    }
    
    for (let value of map.values()) {
        console.log("Value: %s", value);
    }
    
    for (let item of map.items()) {           这个是默认的
        console.log("Key: %s, Value: %s", item[0], item[1]);
    }
    
    // same as using map.items()   
    for (let item of map) {
        console.log("Key: %s, Value: %s", item[0], item[1]);
    }
    使用forEach 循环 :
    var reporter = {
        report: function(key, value) {
            console.log("Key: %s, Value: %s", key, value);
        }
    };
    
    map.forEach(function(value, key, map) {
        this.report(key, value);
    }, reporter);
    以前使用对象的话,需要检测是否来至原型上
    for (let key in object) {
    
        // make sure it's not from the prototype or a function!
        if (object.hasOwnProperty(key) && typeof object[key] !== "function") {
            console.log("Key: %s, Value: %s", key, object[key]);
        }
    
    }
    使用Map 就不需要担心这些额外的,专注处理数据即可
  • 相关阅读:
    C#跨平台物联网通讯框架ServerSuperIO(SSIO)正式开源... 1
    神秘值分解(Singular Value Decomposition)
    mysql的sql执行计划详解(非常有用)
    springweb flux websocket
    springweb flux 服务器推送事件
    nodejs-express 报错View is not a constructor
    深入理解 Laravel Eloquent(三)——模型间关系(关联)
    Laravel 校验规则之字段值唯一性校验
    Notice: Trying to get property of non-object problem(PHP)解决办法 中间件只能跳转不能返任何数据
    慕客网laravel学习笔记
  • 原文地址:https://www.cnblogs.com/chuangweili/p/5162966.html
Copyright © 2020-2023  润新知