Javascript数组扁平化

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

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]
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  •   引用类型的值(对象)是引用类型的一个实例。   在 ECMAscript 中,引用类型是一种数据结构,用于将数...
    霜天晓阅读 1,088评论 0 1
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,268评论 0 4
  • 十二、LESS教程 Less教程Less 安装Less 嵌套规则Less 操作Less 转义Less 函数 Les...
    茶茶点阅读 326评论 0 3
  • 转载:在开发中,数组的使用场景非常多,平日中也涉及到很多数组的api/相关操作,一直也没有对这块内容进行一块整理总...
    七色烟火阅读 3,241评论 0 3
  • 此刻我已睡了一觉,领导们轮番上阵,慷慨激昂,意气风发。好吧,不是我太没素质、目中无人。报告厅太热,总裁们的报告太长...
    曾九如阅读 186评论 0 2