js实现数组的扁平化处理

时间:2019-12-07
本文章向大家介绍js实现数组的扁平化处理,主要包括js实现数组的扁平化处理使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

方法多多,第一种方法是我在字节面试的时候,要我现场写出来的,记忆深刻

Method 1:array.reduce实现

 1 function flatten(arr = []) {
 2   return arr.reduce((a, b) => {
 3     if (Array.isArray(b)) {
 4       return [...a, ...flatten(b)]
 5     } else {
 6       return [...a, b]
 7     }
 8   }, [])
 9 }
10 
11 var arr = [1, [2, 3], [4, 5, 6]]
12 var newArr = flatten(arr)
13 console.log(newArr)

Method 2: 正常逻辑的递归实现

 1 function flatten(arr) {
 2   let arr1 = []
 3   arr.forEach((val) => {
 4     // 检测左边的原型是否在右边构造函数的作用域链上
 5     if (val instanceof Array) {
 6       arr1 = arr1.concat(fn(val))
 7     } else {
 8       arr1.push(val)
 9     }
10   })
11   return arr1
12 }
13 var arr = [1, 2, [3, 4, 5, [6, 7, 8], 9], 10, [11, 12]];
14 var newArr = flatten(arr)
15 console.log(newArr) // output: 1,2,3,4,5,6,7,8,9,10,11,12

Method 3: apply 方式

function flatten(arr = []) {
  while (arr.some(r => Array.isArray(r))) {
    arr = [].concat.apply([], arr)
  }
  return arr;
}

var arr = [1, [2, 3], [4, 5, 6]]
var newArr = flatten(arr)
console.log(newArr)

更多方法请直接百度,方法多多

原文地址:https://www.cnblogs.com/ajaxkong/p/12002337.html