實(shí)現(xiàn)一個(gè)flatten函數(shù),將一個(gè)嵌套多層的數(shù)組 array(數(shù)組) (嵌套可以是任何層數(shù))轉(zhuǎn)換為只有一層的數(shù)組,數(shù)組中元素僅基本類型的元素或數(shù)組,不存在循環(huán)引用的情況。 Ex:
var arr = [1,[2,3,[4,5]],-4,['q',[['a123']]]] 轉(zhuǎn)換成 [1,2,3,4,5,-4,'q','a123']
思路一:拿到一個(gè)空數(shù)組,循環(huán)遞歸,如果本身是數(shù)組,繼續(xù)遞歸,如果不是,把數(shù)據(jù)放進(jìn)空數(shù)組,直到結(jié)束
function flatten(arr) {
var _arr = []
function _flat(arr) {
arr.forEach(val = >{
if (Array.isArray(val)) {
_flat(val)
} else {
_arr.push(val)
}
})
// 可以通過上面的箭頭函數(shù)來實(shí)現(xiàn) es6寫法
//arr.forEach(function(val){
// if (Array.isArray(val)) {
// _flat(val)
// } else {
// _arr.push(val)
// }
// })
}
_flat(arr) return _arr
}
var arr = [1, [2, 3, [4, 5]], -4, ['q', [['a123']]]]
思路二:通過reduce方法,通過拼接,過程還是上面的過程,判斷是否是數(shù)組,是的話繼續(xù),不是的話拿出來拼接返回一個(gè)新的數(shù)組
function flatten2(arr) {
return arr.reduce(function(initArr, currentArr) {
return initArr.concat(Array.isArray(currentArr) ? flatten2(currentArr) : currentArr)
},[])
}
著急下班,不寫太多東西了,注意一下思路和es6語法,逃~