集合类型
2016-01-27 13:33
218 查看
Array 只允许数字索引,所以当要使用非数字索引时,得用 object
ECMAScript 6 引入了新的集合类型
1、Sets 不能含有重复值得有序列表
如果有完全重复的数值,那么后面出现的将会被忽视,数据比较使用的是=== ,所以 5 和 "5" 不同
可以用数组批量初始化:
检索:
删除:
循环:
2、Maps 有序键值列表
以前都是使用对象,但是对象的键都会强制转化成 字符串, 例如:
这里的 键 element 会被转化为 "[Object HTMLDivElement]"
使用 Maps 的话,键和值可以为任意的数据类型:
和sets 有很多共同方法 :
使用:
使用forEach 循环 :
以前使用对象的话,需要检测是否来至原型上
使用Map 就不需要担心这些额外的,专注处理数据即可
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 就不需要担心这些额外的,专注处理数据即可
相关文章推荐
- 面试笔试杂项积累-leetcode 11-15
- Xcode调试技巧(断点和重构)
- C语言学习之程序运行是内存的5大分区
- linux常用命令2
- Wireshark
- Mongodb 和Redis 的相同点和不同点
- 《1》7层+4层网络模型
- 信息流聚合类系统(如RSS阅读器)中数据同步的架构设计
- 提取URL的搜索字符串中的参数
- Closeable
- curlPost
- IOS平台各种解析XML库的优缺点分析
- Android开发中出现in the gradle.properties file, sets the maximum Java heap size to 1024m的解决方法
- Maximum execution time of 30 seconds exceeded解决办法
- MyCat 学习笔记 第八篇.数据分片 之 求摸运算分片
- HDU 1017 A Mathematical Curiosity
- nginx日志无法记录带有下划线“_”的请求头
- VC++异常捕获??
- react学习笔记2--练习Demos
- TestMarkDown