多维数组降维

145 阅读1分钟

1、数组字符串化

let arr = [[123456],[333],789];
arr += '';
arr = arr.split(',');
console.log(arr); // ['123456' , '333', '789']

2、递归

function demo(arr){
  var newArr = []
  for(var i = 0; i < arr.length; i++){
    if(Array.isArray(arr[i])){
      //如果是数组,调用递归函数 dimension 将其扁平化,然后再 push 到 newArr 中
      newArr.push.apply(newArr,demo(arr[i]))
    }else{
      //不是数组直接 push 到 newArr中
      newArr.push(arr[i])
    }
  }
  return newArr
}

var array = ['1','2',['2',['6',['4','9'],'8'],'5'],'3','3','2']
var reduce = demo(array)

3、利用contact

var a = [1,[2],[3,4]]
  var result = []
  for(var i = 0; i<a.length; i++){
    if(a[i].constructor == Array){
      result = result.concat(a[i])
    }else{
      result.push(a[i])
    }
  }
  console.log(resule) // [1,2,3,4]

4、利用扩展运算符

 var a = [1,[2],[3,4]]
 var result = []
 result = [].concat(...a)
 console.log(result) // [1,2,3,4]

5、利用apply

var a = [1,2,[3,4]]
var result = []
result = Array.prototype.concat.apply([],a)
console.log(result) // [1,2,3,4]

6、Array.prototype.flat()

var arr1 = [1,2,[3,4]]
console.log(arr1.flat()) // [1,2,3,4]

var arr2 = [1,2,[3,4,[5,6]]]
console.log(arr2.flat()) // [1,2,3,4,[5,6]]

var arr3 = [1,2,[3,4,[5,6]]]
console.log(arr3.flat(2)) // [1,2,3,4,5,6]
//使用 Infinity 作为深度,展开任意深度的嵌套数组
console.log(arr3.flat(Infinity)) // [1,2,3,4,5,6]

7、使用reduce、concat和递归无限反嵌套多层嵌套的数组

var arr1 = [1,2,3,[1,2,3,4[2,3,4]]]
function flatDeep(arr1){
  return arr1.reduce(
    (acc,val) => {
      Array.isArray(val)? acc.concat(flatDeep(val)) : acc.concat(val), []
    }
  )
}
console.log(flatDeep(arr1)) // [1,2,3,1,2,3,4,2,3,4]