1. 程式人生 > 程式設計 >js實現陣列的扁平化

js實現陣列的扁平化

目錄
  • 陣列扁平化的方式
    • 1.使用flat()
    • 2.使用正則
    • 3.使用reduce()+concat()
    • 4.使用函式遞迴
  • 5.使用擴充套件運算子+concat()
    • 總結

      陣列扁平化的方式

      什麼是陣列扁平化?

      陣列扁平化:指將一個多維陣列轉化為一個一維陣列。

      例:將下面陣列扁平化處理。

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

      1.使用flat()

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

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

      2.使用正則

      以下做法得到的陣列元素都會變成字串,不建議使用;

      const result1 = ON.stringify(arr).replace(/\[|\]/g,'').split(',')
      console.log(result1) // [ '1','2','3','4','5' ] 陣列元素都變成了字串
      

      對以上方法進行優化處理;

      const result2 = JSON.parse('[' + JSON.stringifwww.cppcns.comy(arr).replace(/\[www.cppcns.com|\]/g,'') + ']')
      console.log(result2) // [ 1,5 ]
      

      3.使用reduce()+concat()

      使用reduce拿到陣列的當前值和前一項值,判斷當前值是否為陣列,初始值設定為[],然後使用concat進行數組合並。

      • reduce()方法:對陣列中的每個元素執行一個由您提供的reducer函式(升序執行),將其結果彙總為單個返回值。
      • concat()方法:用於合併兩個或多個數組。此方法不會更改現有陣列,而是返回一個新陣列。
      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,5 ]
      

      4.使用函式遞迴

      迴圈遍歷陣列,發現含有陣列元素就進行遞迴處理,最終將陣列轉為一維陣列。

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

      5.使用擴充套件運算子+concat()

      ES6新推出的擴充套件運算子能對陣列進行降維處理(一次降一維),迴圈判斷是否含有陣列,進行concat合併。

      some()方法:測試陣列中是不是至少有1個元素通過了被提供的函式測試(它返回的是一個Boolean型別的值)。

      function flatten(arr) {
        while (arr.some(item => Array.isArray(item))) {
          arr = [].concat(...arr)
        }
        returnwww.cppcns.com arr
      }
      const result = flatten(arr)
      console.log(result) // [ 1,5 ]
      

      總結

      本篇文章就到這裡了,希望能夠給你帶來幫助,也希望您能夠多多關注我們的更多內容!