本文共 2510 字,大约阅读时间需要 8 分钟。
ES6提供了新的数据结构Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。 Set本身是一个构造函数,用来生成Set数据结构。
利用Set创建一个数组对象:var arr = [15, 16, 15, 50, 42, 50,16,42,68]; var set = new Set(arr);
当我们输出set实例对象时:
我们可以发现:Set对象出的新实例是没有重复的值的。*注:Set创建时 传递的参数必须是可以进行遍历的 否则就会报错(typeError),数组 伪数组 作为参数 都可以遍历
当我们将伪数组作Set的参数时:
var div=document.getElementsByTagName("div") var set = new Set(div); console.log(set);
add:Set中用于向set数据结构最后一位添加数据的方法
例如:let test = new Set();// 原型方法// add 添加一个数据到set数据结构中test.add(12);test.add(10);test.add(12);test.add(16);// 使用add添加数据 -0和+0 表示的是同一个值 并且NaN都相等test.add(-0);test.add(+0); // 无效test.add(NaN);test.add(NaN); // 无效console.log(test);
结果如图:
我们可以发现:Set结构不能添加重复的值,添加的-0和+0 表示的是同一个值 并且NaN都相等has:判断set数据结构集合中是否存在该元素,返回值为布尔类型
let test = new Set();test.add(12);test.add(10);test.add(12);test.add(16);test.add(-0);test.add(+0); test.add(NaN);test.add(NaN); console.log(test.has(12));console.log(test.has(20));
结果如下:
delete:删除某个数据 ,不传参
或者传的参数为不存在的值
那么就不删除
let test = new Set(); test.add(12); test.add(10); test.add(12); test.add(16); // delete 删除匹配到的数据 返回的结果是是否删除成功 不传参 或者穿的参数为不存在的值 那么就不删除 console.log(test.delete(12)); console.log(test.delete()); console.log(test.delete(40)); console.log(test);
结果如图:
clear:清空整个set集合里面的内容
let test = new Set(); test.add(12); test.add(10); test.add(16); test.clear() console.log(test);
结果如图:
JavaScript的对象(Object),本质上是键值对的集合(Hash结构),但是传统上只能用字符串当作键。这给它的使用带来了很大的限制。在键不为字符串时,就会将键自动转为字符串。例如:
var element = document.getElementById('myDiv');var data = { };data[element] = 'metadata'console.log(data['[object HTMLDivElement]']) // "metadata"console.log(data);
结果如图:
上面代码原意是将一个DOM节点作为对象data的键,但是由于对象只接受字符串作为键名,所以element被自动转为字符串[object HTMLDivElement]。ES6提供了Map数据结构。它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。
set (key, value) 设置键名key对应的键值为value,然后返回整个 Map 结构。如果key已经有值,则键值会被更新,否则就新生成该键。
var m = new Map();var o = { p: 'Hello World'};m.set(o, 'content')console.log(m);
结果如图:
!get(key) 读取key对应的键值,如果找不到key,返回undefined。 Map也可以接受一个数组作为参数。该数组的成员是一个个表示键值对的数组。 例如:
var map = new Map([ ['name', '张三'], ['title', 'Author']]);map.get('name') // "张三"map.get('title') // "Author"
结果:
!has(key) 返回一个布尔值,表示某个键是否在当前 Map 对象之中。
var map = new Map([ ['name', '张三'], ['title', 'Author']]);map.size // 2console.log(map.has('name')); // trueconsole.log(map.has('title')); // true
结果如图:
转载地址:http://pwezi.baihongyu.com/