ES6的Set详解
发布时间:2023-06-29 20:00:18
数组去重
let arr = [ 1,2,3,4,5,3,2 ] // 数组去重 // 方法一 let newArr = [new Set(arr)] console.log(newArr); // 方法二 let newArr2 = Array.from(new Set(arr)) console.log(newArr2);
数组对象去重
let obj = [ {id : 1 ,name : 'zs'}, {id : 2 ,name : 'ls'}, {id : 3 ,name : 'ww'}, {id : 2 ,name : 'ls'} ] // 数组对象去重 let newObj = [...new Set(obj.map(el=> JSON.stringify(el)))].map(res=> JSON.parse(res)) console.log(newObj); // 步骤拆解: /* 1、判断两个基本数据类型是否相同,比较的是数据的值。判断两个引用类型是否一样,比较的是引用 2、set无法将数组对象去重,set去重的原理主要是判断两者存储的单元位置是否一样,如果一样才能去重。 3、基本类型数据存储在栈,值相同就直接去重。引用数据类型存储在堆,引用类型数据 值 相同 位置不相同也无法去重。参考第一条的解释。 4、只要将引用类型数据转变成基本数据类型,基本数据类型直接比较就可以去重了。去重完成后通过字符串转json对象即可。 */ /* [...new Set(obj.map(el=> JSON.stringify(el)))] 这一步 map 将内部的每一条转换成字符串,返回一个新数组,也就是引用类型数据转基本类型数据,下面是转换结果 [ 0: "{\"id\":1,\"name\":\"zs\"}" // 字符串 1: "{\"id\":2,\"name\":\"ls\"}" // 字符串 ] .map(res=> JSON.parse(res)) 这一步将去重处理好的值转换为对象 得到最终结果 */
数组添加
let arr3 = [ {id : 1 ,name : 'zs'}, {id : 2 ,name : 'ls'}, {id : 3 ,name : 'ww'} ] let newArr3 = new Set(arr3) // 尾部添加 newArr3.add({id : 4,name : 'swk'}) console.log('尾部添加'); console.log(newArr3);
数组删除
let arr4 = [1,2,3,4,5,4,4,4] let newArr4 = new Set(arr4) newArr4.delete(2) // 删除成功返回:true 删除失败返回:false console.log('删除数组中某一项'); console.log(newArr4);
检测数组值是否存在
let arr5 = [1,2,3,4,5,6,7] let newArr5 = new Set(arr5) console.log('检测数组中是存在set值'); console.log(newArr5.has(5));// 存在返回true,不存在返回fals
清除数组所有的值
let arr6 = [1,2,3,4,5] let nweArr6 = new Set(arr6) nweArr6.clear() // 清除数组中所有值,没有返回值 console.log('清除数组中所有值'); console.log(nweArr6);
数组长度
let arr7 = [1,2,3,4,5] let newArr7 = new Set(arr7) console.log('获取数组的长度 & size 从1开始'); console.log(newArr7.size);
数组遍历方法
// 这几个与es6的遍历方法一致 Set.prototype.keys() //—— 返回键名的遍历器 Set.prototype.values() // —— 返回键值的遍历器 Set.prototype.entries() // —— 返回键值对的遍历器 Set.prototype.forEach() // —— 使用回调函数遍历元素 // 由于 Set 结构没有键名,只有键值(或者说键名和键值是同一个值), // 所以 keys 方法和 values 方法的行为完全一致