携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第19天,点击查看活动详情
set结构
Set对象是值的集合,你可以按照插入的顺序迭代它的元素。 Set中的元素只会出现一次,即 Set 中的元素是唯一的。另外,NaN和undefined都可以被存储在Set 中, NaN之间被视为相同的值(NaN被认为是相同的,尽管 NaN !== NaN)
起因
倔老板上次创业失败了,毕竟第一创业,考虑不太周全,但是倔老板越挫愈勇,新学了es6的set结构。打算用set结构重构一下公司财务。
过去
倔老板过去只会数组方法,人力资源部门存储以下员工 张三 李四 和 王五,本来开始也很正常,公司运营稳定,利润可观,可是后来财务有了歪心思,知道老板js学的不好,都是按人头发工资,一个2300,三个人就6900,往里面又加了两个重复的人名,一下子就变成6900+4600=11500了。
老板是有点诧异的,但是一看这人名,都认识,确实是员工,也说不出哪里不对劲,这样一来,公司直接倒闭了
var arr = ["张三", "李四", "王五"];
var payment = arr.length * 2300;
老板听说es新出了set结构,决定让财务用set存储员工
创建set实例 ,可以将 Array 传递给 new Set() 构造函数。也可以后面用add方法添加。
var letters = new Set(['张三','李四']);
letters.add('王五')
console.log(letters) // Set(3) {'张三', '李四', '王五'}
财务还是年轻,还想故技重施,往里加两重名的人。可是不管在构造函参数数里加,还是用add方法加,都没有用,财务也是一脸懵,每个值在 Set 中只能出现一次。
var letters = new Set(['张三','李四','张三','李四']);
letters.add('王五')
letters.add('张三')
letters.add('王五')
console.log(letters) // Set(3) {'张三', '李四', '王五'}
财务不甘心,说人名太简单,可能有重名的员工导到时没法区分,老板觉得有理,可以,财务一波操作后,又成功混入,
var letters = new Set([
{
name: "张三",
age: 19,
id: 1,
},
{
name: "王五",
age: 17,
id: 2,
},
{
name: "张三",
age: 19,
id: 1,
},
{
name: "张三",
age: 19,
id: 1,
},
{
name: "张三",
age: 19,
id: 1,
},
]);
letters.add(zs);
console.log(letters);
多亏老板会点js,这隔壁村张三就一个,你这么整不行,你这根本不是一个对象,算法不对,要所有指针指向同一个引用,
let zs = {
name: "张三",
age: 19,
id:1
};
let ls = {
name: "李四",
age: 20,
id:2
};
let ww = {
name: "王五",
age: 17,
id:3
};
var letters = new Set([
zs,
ls,
ww
]);
letters.add(zs);
console.log(letters);
delete
财务直接气死了,再也挣不到黑心钱了,质问老板,这李四离职了,怎么删除?没法删除,老板呵呵了,delete方法了解一下
var letters = new Set([zs, ls, ww]);
letters.add(zs);
letters.delete(ls)
console.log(letters);
has
财务说,我三叔也是咱么员工,给他发个工资,老板说你三叔资料用has看一下,是不是有,财务测试了一下,心虚了,就不敢胡说了
let sanshu={
name:"三叔",
age:18,
id:4
}
var letters = new Set([zs, ls, ww]);
console.log(letters.has(sanshu)); // false
console.log(letters.has(ls)); //true
keys values entries
set的keys和values返回相同的迭代器,但是并不是相等的额,,set中的元素既是key也是value, entries 是有键值组成的Map结构
var letters = new Set([zs, ls, ww]);
console.log(letters.values(),letters.keys()===letters.keys()) // false
for(let i of letters.keys()){
console.log(i)
}
forEach
为每个元素调用回调。遍历每个元素的key和value
size 属性
获取set实例里的元素个数
clear
清空set结构中所有元素,变成一个空的容器
set结构是加强版的数组,而且可以利用它的特性轻松去重。