Map与Set
Map(映射)
创建 Map 对象
let map1 = new Map();
console.log(map1); // Map(0) {size: 0}
let gen = {gender: 'female'};
let map2 = new Map([['name', 'Taylor'], [1, 33], [gen, true]]);
console.log(map2); // Map(3) {'name' => 'Taylor', 1 => 33, {gender: 'female'} => true}
let map = new Map();
console.log(typeof Map); // object
console.log(map instanceof Map); // true
Map 属性与方法
属性/方法 | 含义 | 返回值 |
---|---|---|
size属性 | 计算 Map 中元素个数 | \ |
get(key) | 获取 Map 对象中指定键的值 | 键名存在则返回对应的值,否则返回 undefined |
set(key, value) | 为 Map 对象中的键设置值 | 返回设置后的 Map 对象 |
has(key) | 判断 Map 对象中是否存在指定键 | 存在则返回 true,否则返回 false |
entries() | 获取 Map 对象中所有键值对 | 返回一个由 Map 中所有键值对组成的 Iterator 对象,迭代顺序按照 Map 中的顺序 |
keys() | 获取 Map 对象中所有元素的键名 | 返回一个由 Map 中所有键名组成的 Iterator 对象,迭代顺序按照 Map中的顺序 |
values() | 获取 Map 对象中所有元素的值 | 返回一个由 Map 中所有的值组成的 Iterator 对象,迭代顺序按照 Map 中的顺序 |
forEach(callback) | 根据 Map 中元素的顺序,对每个键值对都执行一次 callback 函数 | 无返回值 |
delete(key) | 删除 Map 对象中指定键对应的元素 | 键存在则将其删除并返回 true,否则返回 false |
clear() | 清空 Map 对象 | 无返回值 |
size属性
let map = new Map([[1, '1'], [2, '2'], [3, '3']]);
console.log(map.size); // 3
get()
let map = new Map([[1, '1'], [2, '2'], [3, '3']]);
console.log(map.get(1)); // 1
set()
let obj = {name: 'Taylor'};
let map = new Map();
console.log(map.set(obj, '1')); // Map(1) {{name: 'Taylor} => '1'}
console.log(map.get(obj)); // 1
console.log(map.set(obj, '2')); // Map(1) {{name: 'Taylor} => '2'}
console.log(map.get(obj)); // 2
has()
let map = new Map([[1, '1'], [2, '2'], [3, '3']]);
console.log(map.has(1)); // true
entries()
let map = new Map([[1, '1'], [2, '2'], [3, '3']]);
console.log(map.entries()); // MapIterator {1 => '1', 2 => '2', 3 => '3'}
keys()
let map = new Map([[1, '1'], [2, '2'], [3, '3']]);
console.log(map.keys()); // MapIterator {1, 2, 3}
values()
let map = new Map([[1, '1'], [2, '2'], [3, '3']]);
console.log(map.values()); // MapIterator {'1', '2', '3'}
forEach(callback)
let map = new Map([['name', 'Taylor'], [2, '33'], [true, 'singer']]);
map.forEach(function(value, key, self){
console.log("now key="+key+", value="+value);
});
// now key=name, value=Taylor
// now key=2, value=33
// now key=true, value=singer
delete()
let map = new Map([[1, '1'], [2, '2'], [3, '3']]);
console.log(map.delete(1)); // true
console.log(map.delete(1)); // flase
console.log(map); // Map(2) {2 => '2', 3 => '3'}
clear()
let map = new Map([[1, '1'], [2, '2'], [3, '3']]);
console.log(map.clear()); // undefined
console.log(map); // Map(0) {size:0}
Map 与其它数据类型相互转换
Map 与数组相互转换
let map = new Map();
map.set(1,'aaa').set(2,'bbb').set(3,'ccc');
console.log(map); // Map(3) {1 => 'aaa', 2 => 'bbb', 3 => 'ccc'}
let arr = [...map];
console.log(arr); // [[1, 'aaa'], [2, 'bbb'], [3, 'ccc']]
let arr = ['a', 1, 'b', 2];
let map = new Map();
let gen = {gender: 'female'};
let map2 = new Map([['name', 'Taylor'], [1, 33], [gen, true]]);
console.log(map2); // Map(3) {'name' => 'Taylor', 1 => 33, {gender: 'female'} => true}
Map 与对象相互转换
let map = new Map();
map.set(1,'aaa').set(2,'bbb').set(3,'ccc');
console.log(map); // Map(3) {1 => 'aaa', 2 => 'bbb', 3 => 'ccc'}
let obj = {};
for(let [k, v] of map) {
obj[k] = v;
}
console.log(obj); // {1: 'aaa', 2: 'bbb', 3: 'ccc'}
let obj = {
name: 'Taylor',
age: 33,
job: 'singer'
};
let map = new Map();
for (let k in obj) {
map.set(k, obj[k]);
}
console.log(map); // Map(3) {'name' => 'Taylor', 'age' => 33, 'job' => 'singer'}
Map 与 JSON 数据相互转换
let map = new Map();
map.set(1,'aaa').set(2,'bbb').set(3,'ccc');
console.log(map); // Map(3) {1 => 'aaa', 2 => 'bbb', 3 => 'ccc'}
let obj = {};
for(let [k, v] of map) {
obj[k] = v;
}
let json = JSON.stringify(obj);
console.log(json); // {"1": "aaa", "2": "bbb", "3": "ccc"}
let json = '{"name": "Taylor","age": 33,"gender": "female","job": "singer"}';
let obj = JSON.parse(json);
console.log(obj); // {name: 'Taylor', age: 33, gender: 'female', job: 'singer'}
let map = new Map();
for (let k in obj) {
map.set(k, obj[k]);
}
console.log(map);
// Map(4) {'name' => 'Taylor', 'age' => 33, 'gender' => 'female', 'job' => 'singer'}
Set(集合)
创建 Set 对象
let set1 = new Set();
console.log(set1); // Map(0) {size: 0}
let gen = {gender: 'female'};
let gen1 = gen;
let set2 = new Set([['name', 'Taylor'], [1, 33], [gen, true]]);
console.log(set2); // Set(3) {'name' => 'Taylor', 1 => 33, {gender: 'female'} => true}
let set = new Set();
console.log(typeof set); // object
console.log(set instanceof Set); // true
Set 的属性与方法
属性/方法 | 含义 | 返回值 |
---|---|---|
size属性 | 计算 Set 中元素个数 | \ |
add(value) | 向 Set 对象中添加元素 | 返回设置后的 Set 对象 |
has(value) | 判断 Set 对象中是否存在指定值 | 存在则返回 true,否则返回 false |
entries() | 获取 Set 对象中所有元素的值 | 返回一个由 Set 对象中所有值组成的 Iterator 对象,迭代顺序按照 Set 中的顺序 |
keys() | 获取 Set 对象中所有元素的值 | 返回一个由 Set 对象中所有值组成的 Iterator 对象, 迭代顺序按照 Set 中的顺序 |
values() | 获取 Set 对象中所有元素的值 | 返回一个由 Set 对象中所有值组成的 Iterator 对象, 迭代顺序按照 Set 中的顺序 |
forEach(callback) | 根据 Set 中元素的顺序,对每个元素都执行一次 callback 函数 | 无返回值 |
delete(value) | 删除 Set 对象中指定值对应的元素 | 存在则将其删除并返回 true,否则返回 false |
clear() | 清空 Set 对象 | 无返回值 |
size属性
let set = new Set(['a','b','c']);
console.log(set.size); // 3
add()
let set = new Set(['a','b','c']);
console.log(set.add('d')); // Set(4) {'a', 'b', 'c', 'd'}
console.log(set.add('a')); // 添加重复元素无效
has()
let set = new Set(['a','b','c']);
console.log(set.has('a')); // true
console.log(set.has(1)); // false
entries()|keys()|values()
let set = new Set(['a','b','c']);
console.log(set2.entries());
// SetIterator {'a' => 'a', 'b' => 'b', 'c' => 'c'}
console.log(set2.keys());
// SetIterator {'a', 'b', 'c'}
console.log(set2.values());
// SetIterator {'a', 'b', 'c'}
forEach(callback)
let set = new Set(['a','b','c']);
set.forEach(function(value1, value2, set){
console.log(`now value1=${value1},value2=${value2}`);
});
// now value1=a,value2=a
// now value1=b,value2=b
// now value1=c,value2=c
delete()
let set = new Set(['a','b','c']);
console.log(set.delete('a')); // true
console.log(set.delete('a')); // false
clear()
let set = new Set(['a','b','c']);
set.clear();
console.log(set); // Set(0) {size: 0}
Set 与其它数据类型相互转换
Set 与数组相互转换
let set = new Set(['a','b','c']);
let arr = Array.from(set);
console.log(arr); // ['a', 'b', 'c']
console.log([...set]); // ['a', 'b', 'c']
let arr = ['b', 'c', 'd'];
let set = new Set(arr);
console.log(set); // Set(3) {'b', 'c', 'd'}
let arr = [1, 1, 2, 4, 3, 4, 6, 6];
let set = new Set(arr);
console.log(set); // Set(5) {1, 2, 4, 3, 6}
let arr1 = [...set];
console.log(arr1); // [1, 2, 4, 3, 6]