欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JS實現(xiàn)數(shù)組扁平化的方法分享

 更新時間:2023年04月20日 10:24:10   作者:webxue  
數(shù)組扁平化指的是:將一個多層嵌套的數(shù)組,處理成只有一層的數(shù)組。本文主要和大家介紹了幾個常用的JS數(shù)組扁平化方法,希望對大家有所幫助

前言

當(dāng)我們遇到一個 樹形結(jié)構(gòu)的數(shù)據(jù),或者 多層嵌套 的數(shù)組,如果想拿到數(shù)組項的 某一個 字段值,操作起來將會很麻煩,這個時候就需要我們將數(shù)組 扁平化 之后,通過 map 方法直接就可以拿到。

過程

什么是扁平化

數(shù)組扁平化指的是:將一個多層嵌套的數(shù)組,處理成只有一層的數(shù)組,如下代碼:

const arr = [
  { id:1,title:"文章管理",children:[
      { id:2,title:"文章列表",children:[
          { id:3,title:"文章新增" },
          { id:4,title:"文章刪除" },
      ] }
  ] }
]

// 轉(zhuǎn)換之后
[
  { id:1,title:"文章管理" },
  { id:2,title:"文章列表" },
  { id:3,title:"文章新增" },
  { id:4,title:"文章刪除" },
]

通過上面的結(jié)果我們就可以很方便地拿出所有的 id 。

方法一:flat

flat:這是ES6Array對象新增的一個方法,可以很方便的把多維數(shù)組轉(zhuǎn)換為一維數(shù)組。MDN文檔參考此處

flat方法的參數(shù)是深度,默認(rèn)是 1,表示展開幾層。

假設(shè)我們是 三維數(shù)組 ,那展開的深度就應(yīng)該是 3-1。

這樣做確實有些麻煩,JavaScript 也貼心地為我們提供了 Infinity,可在此處查看介紹。

所以我們可以將 arr.flat(2) 修改為 arr.flat(Infinity)

但是使用 flat 存在個 弊端 ,當(dāng)我們 數(shù)組項 是 對象,且 無限下鉆 時,就不能很好的幫我們展開了,這個時候就引入第二種方法。

方法二:遞歸

遞歸:是一種 算法,表示在一個 函數(shù) 內(nèi) return自身 ,當(dāng)滿足 指定條件 時 return值 跳出循環(huán)。

這里我們定義一個遞歸方法 flatArr,方法接收源數(shù)組 data 和 子集key childField

function flatArr(data = [],childField = ""){} 

定義一個結(jié)果集 result ,并最終返回:

function flatArr(data = [],childField = ""){
  const result = [];
  
  return result;
} 

接下來定義一個遞歸方法 deepFn,接收一個數(shù)組參數(shù) arr ,并循環(huán) arr 執(zhí)行遞歸,將循環(huán)出來的每一項pushresult,并調(diào)用這個遞歸方法 :

function flatArr(data = [],childField = ""){
  const result = [];
  const deepFn = (arr) => {
    arr.forEach(e => {
      if(e[childField] && e[childField].length > 0 ){
        deepFn(e[childField])
      }else{
        result.push(e)
      }
    })
  }
  deepFn(data);
  return result;
}

至此,這個遞歸方法就這樣實現(xiàn)了,接下來我們測試一下:

好嘞,確實沒什么問題,大功告成!

到此這篇關(guān)于JS實現(xiàn)數(shù)組扁平化的方法分享的文章就介紹到這了,更多相關(guān)JS數(shù)組扁平化內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • ES6字符串模板,剩余參數(shù),默認(rèn)參數(shù)功能與用法示例

    ES6字符串模板,剩余參數(shù),默認(rèn)參數(shù)功能與用法示例

    這篇文章主要介紹了ES6字符串模板,剩余參數(shù),默認(rèn)參數(shù)功能與用法,結(jié)合具體實例形式分析了ECMAScript6中的6字符串模板,剩余參數(shù),默認(rèn)參數(shù)的概念、作用、使用方法與相關(guān)注意事項,需要的朋友可以參考下
    2017-04-04
  • 詳解基于Vue cli生成的Vue項目的webpack4升級

    詳解基于Vue cli生成的Vue項目的webpack4升級

    這篇文章主要介紹了詳解基于Vue cli生成的Vue項目的webpack4升級,本文將詳細(xì)介紹從webpack3到webpack4的升級過程,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • Javascript中 toFixed四舍六入方法

    Javascript中 toFixed四舍六入方法

    本篇文章主要介紹了Javascript中 toFixed四舍六入方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • 在IE下:float屬性會影響offsetTop的取值

    在IE下:float屬性會影響offsetTop的取值

    在IE下:float屬性會影響offsetTop的取值...
    2006-12-12
  • 分享ES6的7個實用技巧

    分享ES6的7個實用技巧

    本文給大家分享了es6的7個實用技巧,非常不錯,具有參考借鑒價值,感興趣的朋友一起學(xué)習(xí)吧
    2018-01-01
  • 微信小程序使用第三方庫Immutable.js實例詳解

    微信小程序使用第三方庫Immutable.js實例詳解

    Immutable 是 Facebook 開發(fā)的不可變數(shù)據(jù)集合。不可變數(shù)據(jù)一旦創(chuàng)建就不能被修改,是的應(yīng)用開發(fā)更簡單,允許使用函數(shù)式編程技術(shù),比如惰性評估。微信小程序無法直接使用Immutable.js,下面就來說說微信小程序如何使用第三方庫Immutable.js。
    2016-09-09
  • 為調(diào)試JavaScript添加輸出窗口的代碼

    為調(diào)試JavaScript添加輸出窗口的代碼

    調(diào)試JavaScript是一件很麻煩的事,盡管有很多很好用的調(diào)試工具,但有時候想要跟蹤值的變化,但即不想中斷腳本執(zhí)行,也不想用alert顯示值信息,這種情況下,一般的做法是在頁面上添加一個DIV或者其它元素,然后再往里面添加調(diào)試信息。
    2010-02-02
  • 微信小程序?qū)崿F(xiàn)自定義底部導(dǎo)航

    微信小程序?qū)崿F(xiàn)自定義底部導(dǎo)航

    這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)自定義底部導(dǎo)航,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • 微信小程序三級聯(lián)動地址選擇器的實例代碼

    微信小程序三級聯(lián)動地址選擇器的實例代碼

    本篇文章主要介紹了微信小程序三級聯(lián)動地址選擇器的實例代碼,具有一定的參考價值,有興趣的可以了解一下
    2017-07-07
  • JavaScript解析JSON數(shù)據(jù)示例

    JavaScript解析JSON數(shù)據(jù)示例

    這篇文章主要介紹了JavaScript解析JSON數(shù)據(jù),涉及javascript針對json格式數(shù)據(jù)的讀取、遍歷相關(guān)操作技巧,需要的朋友可以參考下
    2019-07-07

最新評論