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,240評論 0 3
  • 此刻我已睡了一覺,領導們輪番上陣,慷慨激昂,意氣風發。好吧,不是我太沒素質、目中無人。報告廳太熱,總裁們的報告太長...
    曾九如閱讀 186評論 0 2