您的位置:首页 > 其它

集合类型

2016-01-27 13:33 218 查看
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 就不需要担心这些额外的,专注处理数据即可
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: