JS中Map对象的创建,遍历(7种)和使用(增删改查)
程序开发
2023-09-19 07:05:26
intro
JS中的Object类型实际上是一种键值对映射(key-value pairs)。
但是JS中这种键值对映射有点问题:key只能为string类型。
为了和其他编程语言有相似的数据结构(如Map, Dict等),ES6中新增了Map
类型。
API
Map()
构造方法。
size
成员方法,返回map的大小。
MapIterator
获取map
对象的迭代器,有4种方式:
map.keys()
遍历map的keys。
map.values()
遍历values。
map.entries()
遍历map的键值对。
map[Symbl.iterator]()
相当于map.entries()
,也是对[key, value]
进行遍历。
Map对象的7种遍历(1 + 2 * 3)
forEach()
for..of
遍历keys, values, entries
iterator.next()
遍历keys, values, entries
forEach()
方法
map.forEach(function(value, key) {console.log(key, value);
})
for..of
循环
keys = map.keys();
for (key of keys) {console.log(key); // map.get(key)可得value值。
}values = map.values();
for (value of values) {console.log(value);
}entries = map.entries();
for ([key, value] of entries) {console.log(key, value);
}
利用Map Iterator
对象的next()
方法遍历(遍历次数为map.size
)。
keys = map.keys();
for (i = 0; i < map.size; i++) {key = keys.next().value; // obj.propertyName// key = keys.next()[value]; // obj[propertyName]console.log(key);
}values = map.values();
for (i = 0; i < map.size; i++) {value = values.next().value;console.log(value);
}entries = map.entries();
for (i = 0; i < map.size; i++) {entry = entries.next().value;console.log(entry[0], entry[1]);
}
NOTE
entryObj = entries.next()
entries.next()
指向下一个键值对的对象。
entry = entryObj.value
entryObj
是一个对象 {value:[key, value],done:false}
。
key = entry[0]
value
属性的值实际上是一个长度为2的数组[key, value]
。
value = entry[1]
Map的使用和entry相关类型查看
map = new Map(); // 构造Map对象。
Map(0) {}
map.size // 大小为0
0
map.set(1, "one").set(2, "two").set(3, "three"); // 增加键值对
Map(3) {1 => "one", 2 => "two", 3 => "three"}
map.size // 大小为3
3
entries = map.entries(); // 获取键值对的`Map Iterator`对象
MapIterator {1 => "one", 2 => "two", 3 => "three"}
Object.prototype.toString.call(entries) // 类型为`MapIterator`。
"[object Map Iterator]"
entryObj = entries.next(); // 调用next(),返回一个entryObj,是个对象{value:数组, done:false}。
{value: Array(2), done: false}
Object.prototype.toString.call(entryObj)
"[object Object]"
entry = entryObj.value // 对象的value属性是一个数组,长度为2。
(2) [1, "one"]
Object.prototype.toString.call(entry)
"[object Array]"
entry
(2) [1, "one"]
console.log(entry[0], entry[1])
VM7998:1 1 "one"
link
ES6新特性 Iterator
标签:
上一篇:
覆盖率测试工具
下一篇:
相关文章
-
无相关信息