前置知識:
concat() 方法用于連接兩個或多個數(shù)組。
該方法不會改變現(xiàn)有的數(shù)組衙傀, 而僅僅會返回被連接數(shù)組的一個副本返回一個新的數(shù)組抬吟。
該數(shù)組是通過把所有 arrayX 參數(shù)添加到 arrayObject 中生成的。 如果要進(jìn)行 concat() 操作的參數(shù)是數(shù)組统抬, 那么添加的是數(shù)組中的元素火本, 而不是數(shù)組危队。
如:
const res= [].concat(1, 2, [3, 4], 5)
console.log(res) //[1, 2, 3, 4, 5] 只有一層數(shù)組,完成數(shù)組拍平
const res2 = [].concat(1, 2, [3, [4]], 5)
console.log(res2) //[1, 2, 3, [4], 5] 超過一層數(shù)組钙畔,只能拍平一層數(shù)組
結(jié)論:concat()方法可以拍平數(shù)組茫陆,但只能拍平一層數(shù)組
利用concat進(jìn)行遞歸處理數(shù)組拍平:
思路:
驗證有沒有深層數(shù)組,沒有則返回刃鳄,如果有進(jìn)行拍平盅弛,繼續(xù)遞歸處理
代碼如下:
function flat(arr) {
// 驗證 arr中钱骂,還有沒有深層數(shù)組
var isDeep = arr.some(item => item instanceof Array)
if (!isDeep) {
//如果不是深層數(shù)組
return arr
}
//是深層數(shù)組叔锐,拍平數(shù)組后,遞歸繼續(xù)判斷處理
const res = Array.prototype.concat.apply([], arr)
return flat(res)
}
const res = flat([1, 2, [3, [4, 6], 7], 5])
console.log(res) //[1, 2, 3, 4, 6, 7, 5]