数组扁平化,去重,排序一套全搞定
数组扁平化
数组扁平化,就是把多维数组变成一维数组。
arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10] newArr = [1, 2, 2, 3, 4, 5, 5, 6, 7, 8, 9, 11, 12, 12, 13, 14, 10] 复制代码
比如将arr变成newArr就是数组扁平化 下面采用4种方法实现
1.使用数组的reduce()方法
reduce方法详解
function fn(arr){ return arr.reduce((result,item)=>{ return result.concat(Array.isArray(item)?fn(item):item) },[]) } 复制代码
2.先转换成字符串,在通过字符串转换为数组完成
这里介绍两种方法
利用数组的toString()方法,再使用split()分割还原为数组
利用数组的join()方法,再使用split()分割还原为数组
toString方法详解
join方法详解
split方法详解
function fn(arr){ return arr.toString().split(',').map(item=>{ return Number(item) }) } function fn(arr){ return arr.join().split(',').map(item=>{ return Number(item) }) } 复制代码
3.普通递归实现
function fn(arr){ let result = [] for(let i = 0;i<arr.length;i++){ if(Array.isArray(arr[i])){ result =result.concat(fn(arr[i])) }else{ result.push(arr[i]) } } return result } 复制代码
4.使用扩展运算符实现
判断arr是否为数组,如果是数组就使用罗站运算符扩展一次
function fn(arr){ while(arr.some(item=>Array.isArray(item))){ arr = [].concat(...arr) } return arr } 复制代码
总结
数组降维(扁平化)的核心思想就是:遍历数组arr,如果arr[i]是数组就递归遍历,直到arr[i]不为数组与之前的结构连接(concat)。
作者:小铃铛
链接:https://juejin.cn/post/7021763639522623495