JS2 查找重复元素
1. Set 是es6新增的数据结构,类似于数组,他的一大特性就是所有元素都是唯一的,没有重复的值,我们称为集合。 let a = new Set([1, 2, 3]); =>Set(3) {1, 2, 3}
可以理解他是键名和键值一样的Key-value形式
let list = new Set()
1、增加元素 add():list.add(1)
同样的值只会被添加一次
2、删除元素 delete():list.delete(30)
直接删除值为30的元素,不是下标
3、是否存在 has():list.has(2) //true
返回一个布尔值,判断2是否是list Set 里面的成员
4、清除所有元素 clear():list.clear()
5、遍历方法 keys():list.keys()
返回键名
let list2=new Set(['a','b','c'])
for(let key of list2.keys()){
console.log(key)//a,b,c
}
6、遍历方法 values():list.values()
返回键值
let list=new Set(['a','b','c'])
for(let value of list.values()){
console.log(value)//a,b,c
}
7、遍历方法 entries():list.entries()
返回键值对的遍历器
let list=new Set(['4','5','hello'])
for (let item of list.entries()) {
console.log(item);
}
// ['4','4'] ['5','5'] ['hello','hello']
遍历方法 forEach():list.forEach((value, key) => console.log(key + ' : ' + value))
使用回调函数遍历每个成员
let list=new Set(['4','5','hello'])
list.forEach((value, key) => console.log(key + ' : ' + value))
// 4:4 5:5 hello:hello
数据去重大法
1、数组去重
let arr = [3, 5, 2, 2, 5, 5];
let setArr = new Set(arr) // 返回set数据结构 Set(3) {3, 5, 2}
//方法一 es6的...解构
let unique1 = [...setArr ]; //去重转数组后 [3,5,2]
//方法二 Array.from()解析类数组为数组
let unique2 = Array.from(setArr ) //去重转数组后 [3,5,2]
【拓】三个点...叫做拓展运算符,是ES6中新增的内容,它可以在函数调用/数组构造时,将数组表达式或者string在语法层面展开,还可以在构造字面量对象时将对象表达式按照key-value的方式展开。
字面量一般指[1,2,3]或者{name:'chuichui'}这种简洁的构造方式,多层嵌套的数组和对象三个点就无能为力了
大白话:...就是把不管是数组的[],还是对象的{},全部干掉。变成最简介的。
可以用在(数组、对象)复制、合并、字符转数组、函数传参方式等。(如果是字符串,会拆成单个字符)
例子:
// 数组 var number = [1,2,3,4,5,6] console.log(...number) //1 2 3 4 5 6 //对象 var man = {name:'chuichui',height:176} console.log({...man}) / {name:'chuichui',height:176}
2、字符串去重
let str = "352255";
let unique = [...new Set(str)].join(""); // 352
【拓】 .join() ,把数组中的所有元素转换为一个字符串
上面的例子中,new Set(str)=》{3,5,2},所以...{3,5,2}=》3,5,2 所以[3,5,2].join("")=》352
3、并集、交集、差集
let a = new Set([1, 2, 3]);
let b = new Set([4, 3, 2]);
// 并集
let union = new Set([...a, ...b]);
// Set {1, 2, 3, 4}
// 交集
let intersect = new Set([...a].filter(x => b.has(x)));
// set {2, 3}
// (a 相对于 b 的)差集
let difference = new Set([...a].filter(x => !b.has(x)));
// Set {1}
【拓】filter() 用于对数组进行过滤
[].filter(x=>b.has(x)) =》[2,3]
b.has(x) 是set对象的方法之一,has()直接判断是否有这个值