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;
    }
  }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章