集合类型

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 就不需要担心这些额外的,专注处理数据即可
原文地址:https://www.cnblogs.com/chuangweili/p/5162966.html