Set:ES6中提供的新的数据结构set。特点:1.类似数组,属性值时唯一的!!2.Set本身是一个构造函数,用来生成数据结构,表现形式{1,"3",78},是个数据集合
var s = new Set(); s.add(1).add(2).add(3).add(3).add(NaN).add(NaN).add({}).add({}); console.log(s);//Set {1, 2, 3, NaN, Object {}, Object {}}
【注意】:
-
1.set里的成员是唯一的:所有只有一个3
-
2.NaN在此是个特殊,也只能打印出一个NaN
-
3.此处的对象是对应两个引用,所以是两个object
Set的属性和方法
属性:
-
1.Set.prototype.constructor:构造函数,默认就是Set函数。
-
2.Set.prototype.size:返回Set实例的成员总数。
方法:
-
1.add(value); 添加某个值,返回Set结构本身
-
delete(value); 删除某个值,返回一个布尔值,表示删除是否成功
-
has(value); 返回一个布尔值,表示该值是否为Set的成员4. clear(); 清除所有成员,没有返回值
试问:我们现在如何拿到其中一个任意值?
四种遍历的方法,用于遍历成员,配合for of使用
1.keys(); 返回一个键名的遍历器
2.values(); 返回一个键值的遍历器(这里的键值都是一个东西)
3.entries():返回一个键值对的遍历器
4.for in:使用回调函数遍历每个成员 for in:使用回调函数遍历每个成员
var md = new Set([1,43,56,"lalala"]); for(let item of md){ console.log(item); } // 1 // 43 // 56 // lalala
// keys(); 返回一个键名的遍历器
let set = new Set(['red', 'green', 'blue']); for (let item of set.keys()) { console.log(item); } // red // green // blue
// values(); 返回一个键值的遍历器(这里的键值都是一个东西)
for(let item of set.values()){ console.log(item); } // red // green // blue
// entries():返回一个键值对的遍历器
for(let item of set.entries()){ console.log(item); } // ["red", "red"]s // ["green", "green"] // ["blue", "blue"]
【数组剔重】(几种方法)
// 源生的方法一:
var arr=[3,5,7,8,10,4,2,3,3,3,4,2]; var nArr = []; for(let i = 0; i < arr.length; i++){ if(nArr.indexOf(arr[i]) === -1){ nArr.push(arr[i]); } } console.log(nArr);//[3, 5, 7, 8, 10, 4, 2]
//源生的方法二
var arr=[3,5,7,8,10,4,2,3,3,3,4,2]; for(var i = 0; i < arr.length; i++){ for(var j = i+1; j <arr.length; j++){ if(arr[i]==arr[j]){ arr.splice(j,1); j--; } } } console.log(arr);
//方法三:利用set里的值唯一的属性
var arr99 = new Set(arr); console.log(arr99);//Set {3, 5, 7, 8, 10…} //再来解构一下,变成[] var arr88 = [...arr99]; console.log(arr88);//[3, 5, 7, 8, 10, 4, 2]