时刻准备着数组去重
Tom数组去重常用方法
1.ES6的new Set()去重
1 2 3
| let arr = [1, 1, 2, 3, 4, 4, 2, 3, 6] console.log([...new Set(arr)])
|
Set无法去重引用类型的数据(对象数组),如果数组中的值都是简单的string或者number,可以使用Set去重
2.使用new Map()去重
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| function unique(arr){ const result = [] const arrMap = new Map() for(let i = 0 ; i < arr.length ; i++){ if(!arrMap.has(arr[i])){ arrMap.set(arr[i]) result.push(arr[i]) } } return result } let arr = [1, 1, 2, 3, 4, 4, 2, 3, 6] console.log(unique(arr))
|
如果是数组对象的话也可以在map中存放主键,来达到对象去重
基本的Map()方法
| Method | Description |
| —- | —- |
| new Map() | 创建新的 Map 对象。 |
| set() | 为 Map 对象中的键设置值。 |
| get() | 获取 Map 对象中键的值。 |
| entries() | 返回 Map 对象中键/值对的数组。 |
| keys() | 返回 Map 对象中键的数组。 |
| values() | 返回 Map 对象中值的数组。 |
| clear() | 删除 Map 中的所有元素。 |
| delete() | 删除由键指定的元素。 |
| has() | 如果键存在,则返回 true。 |
3.使用includes去重
1 2 3 4 5 6 7 8 9 10 11
| function unique(arr){ const result = [] for(let i = 0 ; i < arr.length ; i++){ if(!result.includes(arr[i])){ result.push(arr[i]) } } return result } let arr = [1, 1, 2, 3, 4, 4, 2, 3, 6] console.log(unique(arr))
|
4.最古老的方法,双循环去重
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| function unique(arr) { for (let i = 0, len = arr.length; i < len; i++) { for (let j = i + 1; j < len; j++) { if (arr[i] === arr[j]) { arr.splice(j, 1); j--; len--; } } } return arr } let arr = [1, 1, 2, 3, 4, 4, 2, 3, 6] console.log(unique(arr))
|
5.最有趣的去重方法,filter去重
1 2 3 4 5
| function unique5(arr){ return arr.filter((item,index)=> arr.indexOf(item) === index) } let arr = [1, 1, 2, 3, 4, 4, 2, 3, 6] console.log(unique5(arr))
|