1.了解Map、Set的特性
Map:
new Map() 一个键值对集合,每个key对应一个value。
方法:
1. get(key) 获取key对应的value
2. set(key,value) 设置键值对
3. has(key) 是否存在key
4. delete(key) 删除key对应的键值对
Set:
new Set() 一组key的组合,不存储value,key不能重复,重复元素在set中自动被过滤
方法:
1. add()
2. delete()
二 需求: [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10] 将数组扁平化去重,然后升序排列。 分析:首先需要将数组扁平化,然后去重
一.数组扁平化的几种方式
-
flat(depth):深度递归数组,depth传入递归的层级,默认为1
-
String(arr).split(',') 或者 arr.toString().split(',') 或者 arr.join(',')用toSring()会改变原始数据的类型,所以还需要用map遍历数组转为number
arr.map(item => { return parseInt(item) })
-
reduce 遍历每一项,如果是数组则遍历 否则cancat()
function flatten(arr){ return arr.reduce((result,item) => { result.cancat(Array.isArray(item) ? flatten(item) : item) },[]) } -
递归
let arr1 = [] function flatten(arr){ arr.map(item => { if(Array.isArray(item)){ flatten(item) }else{ arr1.push(item) } }) } -
es6的解构
[].cancat(...[1,2,3,[4,5,[6,7],6],7])
二、去重
-
根据上文介绍的Set的特性,是一个键不重复的集合
Array.from(new Set(arr)) -
indexOf()
function noRepeat(arr){ let arr1 = [] arr.map(item => { if(arr1.indexOf(item) == -1){ arr1.push(item) } }) } -
遍历双循环
let arr = [1,2,2,3,3,4,1] function noRepeat(){ for(i=0;i<arr.length;i++){ for(j=i+1;j<arr.length;j++){ if(arr[j] == arr[1]){ arr.splice(j,1) j-- } } } } return arr