JS實現數組扁平化的方法

一、緣由

在github上看到一道題,《將數組扁平化並去除其中重複數據,最終得到一個升序且不重複的數組》,要求如下:

已知如下數組:
var arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10];
編寫一個程序將數組扁平化去併除其中重複部分數據,最終得到一個升序且不重複的數組

二、方法

看到題目的第一想法,就是遞歸。每次判斷元素是否爲數組,如果是數組就調用遞歸函數,如果不是,則推入隊列。實現並不複雜:

function recursive(data, result) {
  if (Object.prototype.toString.call(data) === '[object Array]') {
    data.forEach(item => {
      recursive(item, result)
    })
  } else {
    result.push(data)
  }
}

function serialArray(array) {
  let result = []
  array.forEach(item => {
    recursive(item, result)
  })
  return Array.from(new Set(result)).sort((a, b) => a - b)
}

let arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10]
console.log(serialArray(arr)) // [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 ]

不過看到大佬一行代碼搞定,默默流汗,還是對數組的原型方法不熟,原來有這麼多好用的

Array.from(new Set(arr.flat(Infinity))).sort((a,b) => a-b)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章