- 类似于数组,但成员的值都是唯一的,没有重复
- 与数组不同的是set没有索引
let s1=new Set([1,2,3,4,2,1])
console.log(s1);
console.log([...s1]);//...展开运算符默认会调用内置迭代器,自动转换为数组形式
console.log(Array.from(s1));//将类似于数组的内容转化为真数组
set结构键名和键值相同,放进一个数组[11 ,11][22,22][33,33]
for(let i of s2.entries()){
console.log(i);
}
set结构没有索引只有一个值,因此结果是11 11;22 22;33 33
s2.forEach((item,index)=>{
console.log(item,index);
})
// 数组也可以用entries
// let arr=["aa","bb","cc"]
// for(let i of arr.entries()){
// console.log(i);//打印出来是索引和值组成的数组
// }
let arr=["aa","bb","cc"]
for(let [index,item] of arr.entries()){
console.log([index,item]);
}//[0,11][1,22][2,33]
面试题:给一个数组去重
思路:把数组里面的item都转换为字符串(因为set无法区分对象),再送到set里面进行判断有没有
arr. filter()方法里面的函数返回false会清除该数据,true会保留
let list=[1,2,2,"kerwin","kerwin",[1,2],[3,4],[1,2],
{name:"kerwin"},{age:100},{name:"kerwin"},undefined,undefined];
function uni(arr){
let res=new Set();
return arr.filter(item=>{
let id=JSON.stringify(item);
if(res.has(id)){
return false;
}else{
res.add(id);
return true;
}
})
}
console.log(uni(list));