Javascript数组扁平化

2019-08-21  本文已影响0人  住在醉翁亭边

数组的扁平化是指将多维数组转换成一位数组。

let arr = [ [1, 2, 2], [6, [11, 12 ]], 10]; //多维数组
let flatArr = [1, 2, 2, 6, 11, 12, 10]; // 一维数组

递归方法

function flatten(arr){
  let flatArr = [];
  for(let i=0; i<arr.length; i++){
    let item = arr[i];
    if(Array.isArray(item)){ // 如果item还是数组,递归调用函数
      flatArr = flatArr.concat( flatten(item) )
    }else{ // item不是数组直接push进新的数组
      flatArr.push( item )
    }
  }
  return flatArr
}

用数组的reduce方法来简化递归操作

function flatten(arr){
  let flatArr = arr.reduce((prev, next) => {
    return prev.concat( Array.isArray(next)? flatten(next):next )
  }, [])
  return flatArr
}

用数组的toString或者join方法

toString方法会将数组转化成移逗号隔开的字符串,join方法其实是重现了toString方法,但是可以给join方法提供一个参数,这个参数用来分隔生成的字符串。

let arr = [ [1, 2, 2], [6, [11, 12 ]], 10];
function flatten(arr){
  let strArr = arr.toString(); // 先将数组转化成字符串 "1,2,2,5,11,12,10"
  return strArr.split(',') // 再用split方法将字符串变成数组 
}
function flatten(arr){
  let strArr = arr.join(','); // join方法有和toString方法一样的效果
  return strArr.split(',') // 这里只要保证给split的参数和join的参数一样就行了
}

用es6数组的flat方法

let arr = [ [1, 2, 2], [6, [11, 12 ]], 10];
let flatArr = arr.flat(); // [1, 2, 2, 6, 11, 12, 10]

利用loadsh工具库

let arr = [ [1, 2, 2], [6, [11, 12 ]], 10];
_.flatten(arr); // flatten方法只能减少一级嵌套深度
// [1, 2, 2, 6, [11, 12], 10]

_.flattenDeep(arr); // flattenDeep方法不管数组有多少层,都会处理成一层
// [1, 2, 2, 6, 11, 12, 10]

_.flattenDepth(arr, depth); // flattenDepth会根据提供的depth来减少数组的嵌套层数
_.flattenDepth(arr, 1); // [1, 2, 2, 6, [11, 12], 10]
_.flattenDepth(arr, 2); // [1, 2, 2, 6, 11, 12, 10]
上一篇 下一篇

猜你喜欢

热点阅读