javascript基础知识之多维数组扁平化去重排序
var arr = [1,2,3,4,5,[1,2,6,8]]
=> [1,2,3,4,5,6,8]
多维数组扁平化的核心思路是迭代与递归
关键词flat,forEach,reduce,map
var arr = [1,2,3,4,5,[1,2,6,8]] // js方法实现 var flatArr = arr.toString().split(",") //扁平 function unlink(arr) { //去重 return arr.filter(function (item, index, arr) { //当前元素,在原始数组中的第一个索引==当前索引值,否则返回当前元素 return arr.indexOf(item, 0) === index; }); } var filterArr = unlink(flatArr) function systemSort(arr) { //排序 return arr.sort(function(a, b) { return a - b }) } var sortArr = systemSort(filterArr) console.log('sortArr',sortArr) // es6方法1 function getFlatSort(arr) { return Array.from(new Set(arr.flat(Infinity))).sort((a, b) => { return a - b }) } //不排序 //newArr = Array.from( new Set(arr.flat(Infinity)) ) console.log(getFlatSort(arr)) //es6方法2 let array = arr.flat(Infinity) let arrALL = array.filter(function(item,index){ return array.indexOf(item)==index }) console.log(arrALL)
//多维数组扁平化
function flatten(arr){
while(arr.some(item => Array.isArray(item))){
arr = [].concat(...arr);
}
return arr;
}
let oldArr = [1,[2,3],[3,4,5]]
let newArr = flatten(oldArr);
console.log(newArr)
//多维数组扁平化
let arr = [1,[2,[3,[4,5]]],[6,[7,[8,9]]]]
let newArr = []
const decending = (arr) => {
if (arr === null) {
return arr
}
arr.forEach((item)=>{
if(Array.isArray(item)){
decending(item)
}else{
newArr.push(item)
}
})
}
decending(arr)
console.log(newArr)
//lodash.js实现 let lodaArry = _.uniq(_.flattenDeep(arr)) console.log(_.uniq([2, 1, 2]))