版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_20087231/article/details/83307143
1. set 使用
let set = new Set(['zhangsan', 'lisi', 'wangwu', 'wangwu']);
console.log(set); // Set(3) {"zhangsan", "lisi", "wangwu"} 去重
console.log(set.size); // 相当于length
// add 方法
set.add('wen').add('an');
console.log(set); // Set(5) {"zhangsan", "lisi", "wangwu", "wen", "an"} 支持链式调用,返回一个对象
// delete 方法
console.log(set.delete('an')); // true
console.log(set); // Set(4) {"zhangsan", "lisi", "wangwu", "wen"}
// has 方法
console.log(set.has('an')); // false
console.log(set.has('wen')); // true
// clear 方法
set.clear(); // 无返回值
console.log(set); // Set(0) {}
let set = new Set(['zhangsan', 'lisi', 'wangwu', 'wangwu']);
console.log(set.keys()); // SetIterator {"zhangsan", "lisi", "wangwu"}
console.log(set.values()); // SetIterator {"zhangsan", "lisi", "wangwu"}
2. map 使用
类似于对象,本质上是键值对的集合
键不局限于字符串,各种类型的值(包括对象)都可以作为键
对象“字符串-值”,Map“值-值”,是一种更加完善的hash结构实现
对象:
let obj1 = {
a: 1
},
obj2 = {
b: 2
},
obj = {};
obj.name = '张三';
obj[obj1] = '天空'; // {name: "张三", [object Object]: "天空"}
obj[obj2] = '大海'; // {name: "张三", [object Object]: "大海"} 被覆盖
console.log(obj);
Map:
let obj1 = {
a: 1
},
obj2 = {
b: 2
};
const map = new Map(
[
['name', '张三'],
['age', 18],
['sex', '男'],
]
);
console.log(map); // Map(3) {"name" => "张三", "age" => 18, "sex" => "男"}
let obj1 = {
a: 1
},
obj2 = {
b: 2
};
const map = new Map(
[
['name', '张三'],
['age', 18],
['sex', '男'],
[obj1, '今天天气很好'],
[obj2, '适合写代码'],
[
[1, 2], '很好'
]
]
);
console.log(map); // Map(6) {"name" => "张三", "age" => 18, "sex" => "男", {…} => "今天天气很好", {…} => "适合写代码", …}
size 及去重
let obj1 = {
a: 1
},
obj2 = {
b: 2
};
const map = new Map(
[
['name', '张三'],
['age', 18],
['sex', '男'],
[obj1, '今天天气很好'],
[obj2, '适合写代码'],
[
[1, 2], '很好'
],
['name', '李四'],
['age', 50]
]
);
console.log(map); // Map(6) {"name" => "李四", "age" => 50, "sex" => "男", {…} => "今天天气很好", {…} => "适合写代码", …}
console.log(map.size); // 6
set方法
let obj1 = {
a: 1
},
obj2 = {
b: 2
};
const map = new Map(
[
['name', '张三'],
['age', 18],
['sex', '男'],
[obj1, '今天天气很好'],
[obj2, '适合写代码'],
[
[1, 2], '很好'
]
]
);
// set get
map.set('friends', ['赵柳', '李琦']).set(['dog'], '小花');
console.log(map); // Map(8) {"name" => "张三", "age" => 18, "sex" => "男", {…} => "今天天气很好", {…} => "适合写代码", …}
console.log(map.size); // 8
map.set('name', 1);
console.log(map); // Map(8) {"name" => 1, "age" => 18, "sex" => "男", {…} => "今天天气很好", {…} => "适合写代码", …}
console.log(map.size); // 8
get 方法
let obj1 = {
a: 1
},
obj2 = {
b: 2
};
const map = new Map(
[
['name', '张三'],
['age', 18],
['sex', '男'],
[obj1, '今天天气很好'],
[obj2, '适合写代码'],
[
[1, 2], '很好'
]
]
);
// set get
console.log(map.get(obj2)); // 适合写代码
delete方法
has 方法
clear方法
keys方法
values方法
与Set的方法一致
entries方法 返回所有的key 和value
遍历
const map = new Map(
[
['name', '张三'],
['age', 18],
['sex', '男'],
[obj1, '今天天气很好'],
[obj2, '适合写代码'],
[
[1, 2], '很好'
]
]
);
// 遍历
map.forEach(function(value, index) {
console.log(value + ': ' + index);
})
注意事项
let obj1 = {
a: 1
},
obj2 = {
b: 2
};
const map = new Map(
[
['name', '张三'],
['age', 18],
['sex', '男']
]
);
// 注意事项,复杂数据类型开辟的空间都在堆区,每一个对象(包括空的)都会开辟一个新的地址
map.set({}, '呵呵呵呵');
map.set({}, '哈哈哈哈');
console.log(map); // Map(5) {"name" => "张三", "age" => 18, "sex" => "男", {…} => "呵呵呵呵", {…} => "哈哈哈哈"}
console.log({} === {}); // false