数据处理神器——Set对象
2019-02-13 本文已影响0人
南宫__
前言
最近在leetcode和codewars上刷算法题,遇到数组去重、数据类型转换等问题时通常需要使用一大串原生方法来操作数组或字符串以达到目的。过程中发现,ES6中提供了一个数据处理神器——Set对象。它极大地简化了某些数据处理的方法,值得学习和使用。
关于ES6的学习,大家可以参考阮一峰老师的文档。但文档内容繁多,最好的学习方式就是在实践中遇到了,然后主动地有针对性地去学习,这样会有更深刻的理解。个人认为这是学习的最佳方式。
Set本身是一个构造函数,用来生成 Set 数据结构。它类似于数组,但是成员的值都是唯一的,没有重复的值。
遍历字符串
let str = new Set("Hello world!");
for(var str1 of str){
console.log(str1+" ")
}
// H e l o w r d !
Set对象会自动排除重复项,那么它也能轻松进行数组去重:
数组去重
let arr = [12,23,45,34,56,56,87,23,45,12,89];
let arr1 = new Set(arr);
let arr2 = [];
for(let arr3 of arr1){
arr2.push(arr3)
}
console.log(arr2)
// [12, 23, 45, 34, 56, 87, 89]
优化数组去重
function foo(arr){
return Array.from(new Set(arr)) // Array.from方法可以将 Set 结构转为数组
}
const items = [1,2,3,4,1,2,1,3,1,2,3]
console.log(foo(items))
// [1, 2, 3, 4]
Set函数接受数组作为参数,再使用Array.from将其转换为数组,从而达到去重的目的
极简数组去重
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 ]
配合ES6的...方法,将复杂的数组去重简化的一行代码[...new Set(array)]
,以及字符串去重[...new Set('ababbc')].join('')
,简直是极简主义。
其他关于Set对象还有add、has等方法,可以用来处理算法中的Array.diff等问题,由于篇幅原因,就不多介绍了,大家自行去看文档。