数据是具体的东西,类型是个范围,结构(集合)是数据的不同的组合方式 。ES6提供了”值-值“对的数据结构,键名不仅可以是字符串,也可以是对象。它是一个更完善的Hash结构
Set的创建
Set作为一个函数,接收的参数内容只能为数组。
var s = new Set(); //方式一
var s = new Set(["hello",3,4,5,4,3,2,"world"]); //方式二
var s = new Set([{name:'小红',age:20},{name:'小明',age:20},{name:'李四',age:18}]); //方式三
console.log(typeof s); //object
Set的方法
var s = new Set(["hello",3,4,5,4,3,2,"world"])
//不能正常使用数组的方法,例如↓↓↓↓
console.log(s[0]); //undefined
console.log(s.length); //undefined
//不会出现重复数据,会把重复数据剔除掉
console.log(s); //{"hello", 3, 4, 5, 2,"world"}
//下边是Set的的方法,例如↓↓↓↓
//查看Set数据的长度的方法
console.log(s.size); //6
//遍历Set数据的方法
s.forEach(function(val,idx,self){
console.log(val,idx,self);
})
//判断5是否为Set成员,返回值为布尔值
console.log(s.has(5)); //true
//添加成员,重复值不添加
s.add("abc");
console.log(s); //{"hello", 3, 4, 5, 2,"world","abc"}
//删除某个值,返回值为布尔值
s.delete("hello");
console.log(s) //{3, 4, 5, 2, "world","abc"}
//清除所有成员,没有返回值
s.clear();
console.log(s); //{}
Set和数组的转化
因为Set 不能正常使用数组的方法,所以想访问数组内方法,需要转化为数组。
Set结构转为数组
var s = new Set(["hello",3,4,5,4,3,2,"world"]);
var arr = [...s]; //解构
console.log(s);
console.log(arr.length);
console.log(arr[0]);
数组转为Set结构
var arr = [1,2,3,4,5,6,7,6,6,7];
console.log(arr);
var s = new Set(arr); //Set是函数,接收参数可以传入数组,新的数据类型即为Set类型;
console.log(s);
封装数组去重的方法
//根据Set的特性,可以封装一个数组去重的方法norepeat()
function norepeat(arr){
var s = new Set(arr);
return [...s];
}
var a = norepeat([4,5,6,7,8,"7",6,5,4,3,2,1]);
console.log(a);