关于Set对象(ES6)
今天初次接触ES6,发现确实挺神奇的,许多用以前方法去实现需要一大串代码的,用ES6竟然几句就搞定了。
这里我要说的是Set对象。Set对象是ES6中新增的类型,可以自动排除重复项,生成Set对象后,可以轻松遍历它所包含的内容。
例如,遍历字符串。
var str = new Set("Hello world!"); for(var str1 of str){ console.log(str1+" ") }
结果会是这样:H e l o w r d !
为什么会是这样,因为Set对象会自动排除重复项。
到了这里,我们可以很容易的想到使用Set对象进行数组去重,没错,通过该方法确实是挺方便的。
var arr = [12,23,45,34,56,56,87,23,45,12,89]; var arr1 = new Set(arr); var arr2 = []; for(var arr3 of arr1){ arr2.push(arr3) } console.log(arr2)
另一种数组去重法:
1 2 3 4 5 | function foo(arr){ return Array.from( new Set(arr)) // Array.from方法可以将 Set 结构转为数组 } const items = [1,2,3,4,5,6,7,1,2,1,3,1,2,3] console.log(foo(items)) |
Set
函数接受数组作为参数,再使用Array.from将其转换为数组,从而达到去重的目的
还有一种更简洁的;
1 2 3 | let arr1 = [12,13,23,45,46,48,78,79,45,12,13,23]; let arr = new Set(arr1) console.log([...arr]) // [ 12, 13, 23, 45, 46, 48, 78, 79 ] |
(1)、数组去重方法封装:
1 2 3 4 5 6 7 8 9 10 11 | function arr(list) { let arr = [] let obj = {} list.forEach(item => { if (!obj[item]) { arr.push(item) obj[item] = true } }) return arr } |
使用:
let list = [1,2,12,45,23,456,12,4,2,1]
arr(list)
(2)、将数组中对象相同的key值合并到新数组中。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | var list = [ { groupName: '兴趣爱好' , hobby: 'movie' }, { groupName: '名字' , name: '张三' }, { groupName: '性别' , sex: '男' }, { groupName: '兴趣爱好' , hobby: 'reading' }, { groupName: '名字' , name: '李四' }, { groupName: '性别' , sex: '女' } ] let obj = {} list.forEach((item, index) => { let {groupName} = item if (!obj[groupName]) { obj[groupName] = { groupName, data: [] } } obj[groupName].data.push(item) }) let newList = Object.values(obj) // 返回一个给定对象的所有可枚举属性组成的数组 console.log(newList) |
(3)、根据对象的某个属性去排序数组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | var arr=[ { name: "wlz" , age:25 },{ name: "wlz" , age:5 },{ name: "wlz" , age:15 },{ name: "wlz" , age:3 },{ name: "zlw" , age:24 } ] // prop表示需要排序的属性,isShengxu为true表示升序,否则表示降序 function compare(prop, isShengxu) { return function (a, b) { if (isShengxu) { return a[prop] - b[prop] } else { return b[prop] - a[prop] } } } arr.sort(compare( 'age' , false )) |
作者:江峰★
出处:http://www.cnblogs.com/jf-67/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?