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]))

 

posted @ 2022-11-09 15:45  知兮  阅读(101)  评论(0编辑  收藏  举报