set 数据结构的理解
·
①set是一系列无序(因为set没有下标(索引号))、没有重复值的数据集合(数组有序)。不可以用字面量的形式创建,只能用实例化形式创建
②方法和属性
//1.方法
//add()添加成员
const s = new Set();
s.add(1).add(2).add(3);
console.log(s); // {1, 2, 3}
//has()判断是否有某个成员
console.log(s.has(1)); // true
console.log(s.has(4)); // false
//delete()删除某个成员,当删除不存在的成员时,什么都不会发生也不会报错
const a = s.delete(1)
console.log(s); // {2, 3}
//clear()清除所有成员
const b = s.clear();
console.log(s); // {}
//forEach(function(value,key,set){}, this指向)遍历set
//第一个参数是回调函数,回调函数里面的value代表每一个成员,key,在set里没啥用(value=key),set就是实例本身
//第二个参数,是this的指向。
const c = s.forEach(function(value, key, set) {
console.log(value, key, set);
// 第一次迭代 1 1 {1, 2, 3}
// 第二次迭代 2 2 {1, 2, 3}
// 第三次迭代 3 3 {1, 2, 3}
console.log(this); // 一般函数的this指向的是window
});
const d = s.forEach((value, key, set) => {
console.log(value, key, set);
console.log(this); // this指向window
});
//2.属性只有一个 size表示成员的个数
console.log(s.size); //属性不能添加圆括号()
③set构造函数的参数,不能直接传递数值
//1.数组
const s = new Set([1, 2, 1]);
console.log(s); // {1, 2}
//2.字符串
console.log(new Set('hello')); // {'h', 'e', 'l', 'o'}
//3.arguments
function fun() {
console.log(new Set(arguments)); // {1, 2}
};
fun(1, 2, 1);
//4.NodeList
console.log(new Set(document.querySelectorAll('p'))); // {p}
//5.set
console.log(new Set(s)); // {1, 2}
④set的注意事项
Set对重复值的判断基本遵循严格相等(===),但是对于NaN的判断与===不同,set中NaN等于NaN。
⑤set的使用:数组或者字符串去重时;不需要下标访问,只需要遍历时;为了使用set提供的方法和属性时
⑥set的应用
//1.数组去重
const s = new Set([1, 2, 1]);
// console.log(...s); // 1 2
console.log([...s]); // [1, 2]
console.log('****************************');
let arr = [];
s.forEach(function(a) {
arr.push(a);
});
console.log(arr);
console.log('****************************');
//2.字符串去重
const str = 'abbbcccdeffff';
const s1 = new Set(str);
console.log(s1); // {'a', 'b', 'c', 'd', 'e', 'f}
console.log(...s1); // a b c d e f
console.log([...s1]); // ['a', 'b', 'c', 'd', 'e', 'f']
console.log([...s1].join('')); // abcdef
//3.存放DOM元素
const m = new Set(document.querySelectorAll('p'));
更多推荐



所有评论(0)