内置数据对象

set

1
2
new Set(数据);
//如果数据是一个数组,则将里面重复的部分去掉,如果是一串字符串,则分解这一段字符串

size 属性

set.size

新创建的 Set 数据类型不能使用 length 来获取长度,则使用 size 来获取长度

获取调用它的对象或者数组

has 方法

set.has()

查询某个元素是否在 set 中

add 方法

set.add()

在 set 中添加一个元素

delete 方法

set.delete(‘删除的元素值’)

删除 set 中的一个元素

clear 方法

set.clear()

删除 set 中所有的元素

set 不能使用下标来检索数据

如果你的需求是实际按顺序存储值,并且检索它,那么最好的用法是用数组、

没有必要从 set 中获取值

当然,set 也是可以用 for of 来遍历里面的元素的

也可以用拓展运算符对 set 结构进行解构
H8z23.png

map 对象

Map 对象保存键值对,并且能够记住键的原始插入顺序。任何值(对象或者原始数据类型(string,number,…))都可以作为一个键或一个值。

1
2
3
4
5
6
//实例化一个map对象
let mapp = new Map();
//map通过set方法来添加键值对
mapp.set("name", "张三");
//map通过get方法获取键对应的值
mapp.get("name");

同样,map 对象也能使用 set 对象的方法和属性(size,has()…)

可以使用数组作为 map 的键名

1
2
3
4
5
let arr = [1, 2];

mapp.set(arr, "HelloWorld");

console.log(mapp.get(arr));

这里数组名仅仅只是当作键的名字而已

HsxsO.png

甚至页面元素也可以作为键名来使用

1
rest.set(document.querySelector("h1"), "你好!");

H7ykA.png

批量添加 map 元素

1
2
3
4
5
let end2 = new Map([
["name1", "张三"],
["name2", "李四"],
["name3", "王五"],
]);

H77UZ.png

object 转 map

1
2
let obj = { name: "张三", sex: "男", job: "医生" };
let mpp = new Map(Object.entries(obj));

H7IqC.png

遍历 map

1
2
3
for (let [index, value] of mpp.entries()) {
console.log(index, value);
}

H7anm.png

可以用拓展运算符(…)把 map 转换成数组

1
console.log([...mpp]);

HIt3S.png

也可以使用 keys,values,entries 方法

1
2
3
console.log([...mpp.keys()]);
console.log([...mpp.values()]);
console.log([...mpp.entries()]);

HI7CF.png