js將多維數組轉換為一維數組


將多維數組轉換為一維數組

解決方案有很多,以下來一一例舉

方法一:使用數組的join()

let arr = [1, 2, 3, 4, 5, [6, 7, 8, [9, 10, 11, 12, [13, 14, 15, 16]]]]

console.log(arr.join()) // 輸出為:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16

let newArr = arr.join().split(',')

console.log(newArr) // 輸出為:["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16"]

方法二:使用toString()方法

let arr = [1, 2, 3, 4, 5, [6, 7, 8, [9, 10, 11, 12, [13, 14, 15, 16]]]]

console.log(arr.toString()) // 輸出為:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16

let newArr = arr.toString().split(',')

console.log(newArr) // 輸出為:["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16"]

方法三: 使用空字符串的方法

let arr = [1, 2, 3, 4, 5, [6, 7, 8, [9, 10, 11, 12, [13, 14, 15, 16]]]]

console.log(arr+ ''// 輸出為:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16

let newArr = (arr+ '').split(',')

console.log(newArr) // 輸出為:["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16"]

方法四:遞歸調用

let arr = [1, 2, 3, 4, 5, [6, 7, 8, [9, 10, 11, 12, [13, 14, 15, 16]]]]

let newArr = [] // 存放轉化后的一維數組

function arrConversion (arr) {

  for (let i = 0; i < arr.length; i++) {

    if (Array.isArray(arr[i])) {

      arrConversion(arr[i])

    } else {

      newArr.push(arr[i])

    }

  }

}

arrConversion(arr)

console.log(newArr) // 輸出為:["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16"]

es6寫法

const deepFlatten = arr => [].concat(...arr.map(v => (Array.isArray(v) ? deepFlatten(v) : v)));

deepFlatten([1, [2], [[3], 4], 5]); // [1,2,3,4,5]

方法五:flat()

console.log([1 ,[2, 3]].flat()); // [1, 2, 3]

// 指定轉換的嵌套層數

console.log([1, [2, [3, [4, 5]]]].flat(2)); // [1, 2, 3, [4, 5]]

// 不管嵌套多少層

console.log([1, [2, [3, [4, 5]]]].flat(Infinity)); // [1, 2, 3, 4, 5]

// 自動跳過空位

console.log([1, [2, , 3]].flat()); // [1, 2, 3] 

方法六: 正則

let ary = [1, [2, [3, [4, 5]]], 6];

let str = JSON.stringify(ary);

let result = str.replace(/(\[|\])/g, '').split(',');

console.log(result)

方法七: 擴展運算符

let ary = [1, [2, [3, [4, 5]]], 6];// -> [1, 2, 3, 4, 5, 6]

//只要有一個元素有數組,那么循環繼續

while (ary.some(Array.isArray())) {

  ary = [].concat(...ary);

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM