JS數組拍平


日常中我們可能會遇到將多維數組轉換為一維數組的需求,讓我們來看看如何實現

toString()方法

let array = [1, [2], [3, [4, [5]]]]
function flat(arr) {
  return arr.toString().split(',').map(val => +val) // +是為了將字符串轉為數字
}
// 結果為 [1,2,3,4,5]

reduce結合遞歸

const arr = [1, [[2], 3, 4], 5];
const flatten = arr => {
  return arr.reduce((flat, toFlat) => {
    return flat.concat(Array.isArray(toFlat) ? flatten(toFlat) : toFlat);
  }, []);
};
const res = flatten(arr);
// 結果為: [1,2,3,4,5]

flat()方法(參數只有一層的情況)

const arr = [1, [2, 3, 4], 5];
arr.flat();
// 結果為: [1,2,3,4,5]

擴展題目

編寫一個 JavaScript generator 函數,接受一個僅包含數字的多維數組 ,返回一個迭代器,可以遍歷得到它拍平以后的結果。例如:

const numbers = flatten2([1, [[2], 3, 4], 5])
numbers.next().value // => 1
numbers.next().value // => 2
numbers.next().value // => 3
numbers.next().value // => 4
numbers.next().value // => 5

實現

function* flatten2(a) {
  var length = a.length;
  for (var i = 0; i < length; i++) {
    var item = a[i];
    if (typeof item !== 'number') {
      yield* flatten2(item);
    } else {
      yield item;
    }
  }
}


免責聲明!

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



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