一、緣由
在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)