亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

前言

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

過(guò)程

什么是扁平化

數(shù)組扁平化指的是:將一個(gè)多層嵌套的數(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:"文章刪除" },
]

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

方法一:flat

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

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

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

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

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

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

方法二:遞歸

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

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

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

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

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

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

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;
}

至此,這個(gè)遞歸方法就這樣實(shí)現(xiàn)了,接下來(lái)我們測(cè)試一下:

好嘞,確實(shí)沒(méi)什么問(wèn)題,大功告成!

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

相關(guān)文章

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

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

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

    詳解基于Vue cli生成的Vue項(xiàng)目的webpack4升級(jí)

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

    Javascript中 toFixed四舍六入方法

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

    在IE下:float屬性會(huì)影響offsetTop的取值

    在IE下:float屬性會(huì)影響offsetTop的取值...
    2006-12-12
  • 分享ES6的7個(gè)實(shí)用技巧

    分享ES6的7個(gè)實(shí)用技巧

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

    微信小程序使用第三方庫(kù)Immutable.js實(shí)例詳解

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

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

    調(diào)試JavaScript是一件很麻煩的事,盡管有很多很好用的調(diào)試工具,但有時(shí)候想要跟蹤值的變化,但即不想中斷腳本執(zhí)行,也不想用alert顯示值信息,這種情況下,一般的做法是在頁(yè)面上添加一個(gè)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ì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • 微信小程序三級(jí)聯(lián)動(dòng)地址選擇器的實(shí)例代碼

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

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

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

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

最新評(píng)論