zoukankan      html  css  js  c++  java
  • 集合类型

    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 就不需要担心这些额外的,专注处理数据即可
  • 相关阅读:
    Elasticsearch 深入5
    Elasticsearch 深入4
    Elasticsearch 深入3
    Elasticsearch 深入2
    Elasticsearch1简单深入
    Kibana简单操作Elasticsearch
    什么是非阻塞同步?
    面向对象之思考
    使用spring代码中控制事务
    mybatis 中使用oracle merger into
  • 原文地址:https://www.cnblogs.com/chuangweili/p/5162966.html
Copyright © 2011-2022 走看看