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

js實現(xiàn)數(shù)組的扁平化

 更新時間:2021年12月10日 17:20:33   作者:MomentYY  
這篇文章主要為大家介紹了js實現(xiàn)數(shù)組扁平化,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

數(shù)組扁平化的方式

什么是數(shù)組扁平化?

數(shù)組扁平化:指將一個多維數(shù)組轉(zhuǎn)化為一個一維數(shù)組。

例:將下面數(shù)組扁平化處理。

const arr = [1, [2, 3, [4, 5]]] // ---> [ 1, 2, 3, 4, 5 ]

1.使用flat()

flat() 方法是ES10提出的,它會按照一個可指定的深度遞歸遍歷數(shù)組,并將所有元素與遍歷到的子數(shù)組中的元素合并為一個新數(shù)組返回。(flat意為“水平的;平坦的”)

const result1 = arr.flat(Infinity) // 指定深度為無限
console.log(result1) // [ 1, 2, 3, 4, 5 ]
const result2 = arr.flat(1) // 指定深度為1
console.log(result2) // [ 1, 2, 3, [ 4, 5 ] ]
const result3 = arr.flat(2) // 指定深度為2
console.log(result3) // [ 1, 2, 3, 4, 5 ]

2.使用正則

以下做法得到的數(shù)組元素都會變成字符串,不建議使用;

const result1 = JSON.stringify(arr).replace(/\[|\]/g, '').split(',')
console.log(result1) // [ '1', '2', '3', '4', '5' ] 數(shù)組元素都變成了字符串

對以上方法進行優(yōu)化處理;

const result2 = JSON.parse('[' + JSON.stringify(arr).replace(/\[|\]/g, '') + ']')
console.log(result2) // [ 1, 2, 3, 4, 5 ]

3.使用reduce()+concat()

使用reduce拿到數(shù)組的當前值和前一項值,判斷當前值是否為數(shù)組,初始值設(shè)置為[],然后使用concat進行數(shù)組合并。

  • reduce()方法:對數(shù)組中的每個元素執(zhí)行一個由您提供的reducer函數(shù)(升序執(zhí)行),將其結(jié)果匯總為單個返回值。
  • concat()方法:用于合并兩個或多個數(shù)組。此方法不會更改現(xiàn)有數(shù)組,而是返回一個新數(shù)組。
function flatten(arr) {
  return arr.reduce((pre, current) => {
    return pre.concat(Array.isArray(current) ? flatten(current) : current)
  }, [])
}
const result = flatten(arr)
console.log(result) // [ 1, 2, 3, 4, 5 ]

4.使用函數(shù)遞歸

循環(huán)遍歷數(shù)組,發(fā)現(xiàn)含有數(shù)組元素就進行遞歸處理,最終將數(shù)組轉(zhuǎn)為一維數(shù)組。

const result = []
function exec(arr) {
  arr.forEach(item => {
    if (Array.isArray(item)) {
      exec(item)
    } else {
      result.push(item)
    }
  })
}
exec(arr)
console.log(result) // [ 1, 2, 3, 4, 5 ]

5.使用擴展運算符+concat()

ES6新推出的擴展運算符能對數(shù)組進行降維處理(一次降一維),循環(huán)判斷是否含有數(shù)組,進行concat合并。

some()方法:測試數(shù)組中是不是至少有1個元素通過了被提供的函數(shù)測試(它返回的是一個Boolean類型的值)。

function flatten(arr) {
  while (arr.some(item => Array.isArray(item))) {
    arr = [].concat(...arr)
  }
  return arr
}
const result = flatten(arr)
console.log(result) // [ 1, 2, 3, 4, 5 ]

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • JavaScript進階(三)閉包原理與用法詳解

    JavaScript進階(三)閉包原理與用法詳解

    這篇文章主要介紹了JavaScript閉包原理與用法,結(jié)合實例形式詳細分析了JavaScript閉包相關(guān)概念、原理、用法及操作注意事項,需要的朋友可以參考下
    2020-05-05
  • javascript eval函數(shù)深入認識

    javascript eval函數(shù)深入認識

    發(fā)現(xiàn)為本文起一個合適的標題還不是那么容易,呵呵,所以在此先說明下本文的兩個目的
    2009-02-02
  • JavaScript使用function定義對象并調(diào)用的方法

    JavaScript使用function定義對象并調(diào)用的方法

    這篇文章主要介紹了JavaScript使用function定義對象并調(diào)用的方法,實例分析了javascript中function定義及使用對象與方法的相關(guān)技巧,需要的朋友可以參考下
    2015-03-03
  • JS模塊與命名空間的介紹

    JS模塊與命名空間的介紹

    JS模塊與命名空間的介紹,需要的朋友可以參考一下
    2013-03-03
  • JavaScript插入排序算法原理與實現(xiàn)方法示例

    JavaScript插入排序算法原理與實現(xiàn)方法示例

    這篇文章主要介紹了JavaScript插入排序算法原理與實現(xiàn)方法,簡單分析了插入排序的概念、原理并結(jié)合實例形式分析了JavaScript插入排序算法的具體實現(xiàn)技巧與注意事項,需要的朋友可以參考下
    2018-08-08
  • 小程序?qū)崿F(xiàn)錨點滑動效果

    小程序?qū)崿F(xiàn)錨點滑動效果

    這篇文章主要為大家詳細介紹了小程序?qū)崿F(xiàn)錨點滑動效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • 詳解TypeScript2.0標記聯(lián)合類型

    詳解TypeScript2.0標記聯(lián)合類型

    這篇文章主要介紹了TypeScript2.0標記聯(lián)合類型,對TS感興趣的同學,可以參考下
    2021-05-05
  • document.execCommand()的用法小結(jié)

    document.execCommand()的用法小結(jié)

    本篇文章主要是對document.execCommand()的用法進行了詳細的介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2014-01-01
  • JavaScript中的break語句和continue語句案例詳解

    JavaScript中的break語句和continue語句案例詳解

    本文詳細介紹了JavaScript中的break和continue語句的用法及其應用場景,break用于提前退出循環(huán),而continue用于跳過當前迭代,還介紹了標簽化的break和continue,以及如何在實際編程中合理使用這些語句以提高代碼的效率和可讀性,感興趣的朋友一起看看吧
    2025-03-03
  • javaScript刪除對象屬性的幾種方法總結(jié)

    javaScript刪除對象屬性的幾種方法總結(jié)

    這篇文章主要給大家介紹了關(guān)于javaScript刪除對象屬性的幾種方法的相關(guān)資料,它們在不同場景下有不同的應用,需要根據(jù)實際情況選擇最合適的刪除方法,文中通過實例代碼介紹的非常詳細,下面需要的朋友可以參考下
    2023-06-06

最新評論