基本用法
类似于数组,但其成员的值都是唯一的。
创建方法
Set本身是一个构造函数,用来生成Set实例
const s = new Set();
[2, 3, 4, 5, 2, 2].forEach(x => s.add(x));
for (let i of s) {
console.log(i);
}
内部比较机制
向Set实例加入值时不会发生类型转换,因此5和’5’是不同的。
利用算法“Same-value equality”来判断加入的值和已有的值是否相等,类似于Object.is( )方法,如果相等则不加入。
两个对象总是不相等的
let set = new Set();
set.add({});
set.add({});
console.log(set.size);
let a = {};
let b = a;
set.add(a);
set.add(b);
console.log(set.size);
add(value),添加值,返回该Set实例的引用。
delete(value),删除值,返回一个布尔值,表示删除是否成功。
has(value),返回一个布尔值,表示该值是否是Set实例的成员。
clear( ),清除所有成员,没有返回值
let set = new Set();
set.add(1).add(2).add(2);
console.log(set);
console.log(set.has(2));
console.log(set.has(3));
set.delete(1);
console.log(set);
set.clear();
console.log(set);
遍历方法
keys( ),返回键名的遍历器。
values( ),返回键值的遍历器
let set = new Set(["red", "green", "blue"]);
for (let item of set.keys()) {
console.log(item);
}
for (let item of set.values()) {
console.log(item);
}
//Set结构实例的默认遍历器生成函数就是values()方法
for (let item of set) {
console.log(item);
}
基本用法
set(key, value),设置(添加)键值对。
get(key),通过key获取对应值。
类似Set的方法和属性
has(key)
delete(key)
clear( )
size
let m=new Map();
let o={p:'Hello world'};
m.set(o,'content’);
console.log(m.size);
console.log(m.get(o));
console.log(m.has(o));
console.log(m.delete(o));
console.log(m.has(o));
console.log(m.clear());
基本用法
如果Map的键是一个简单类型的值(数值,字符串,布尔值),只要两个值严格相等,Map就认为是同一个键
mm.set(-0, 123);
console.log(mm.get(+0));
mm.set(true, 1);
mm.set("true", 2);
console.log(mm.get(true));
mm.set(undefined, 3);
mm.set(null, 4);
console.log(mm.get(undefined));
map.set(NaN, 111);
console.log(mm.get(NaN));
Map 结构原生提供三个遍历器生成函数和一个遍历方法。
keys():返回键名的遍历器。
values():返回键值的遍历器。
entries():返回所有成员的遍历器。
forEach():遍历 Map 的所有成员。
Map 结构的默认遍历器接口(Symbol.iterator属性),就是entries方法
const map = new Map([
["F", "no"],
["T", "yes"]
]);
for (let [key, value] of map.entries()) {
console.log(key, value);
}
for (let [key, value] of map) {
console.log(key, value);
}
与其他数据结构的相互转换
Map转换为JSON
Map的键名有非字符串,可以转换为数组JSON
function mapToArrayJSON(map) {
return JSON.stringify([...map]);
}
let yourMap = new Map().set(true, 7).set({ foo: 3 }, ["abc"]);
let json2 = mapToArrayJSON(yourMap);
console.log(json2);
与其他数据结构的相互转换
JSON转换为Map
正常情况下所有键名都是字符串
function jsonToStrMap(jsonStr) {
return objToStrMap(JSON.parse(jsonStr));
}
let theMap = jsonToStrMap('{"yes":true, "no": false}');
console.log(theMap);