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 就不需要担心这些额外的,专注处理数据即可