數(shù)組扁平化

??//?什么是數(shù)組扁平化

????????//?將嵌套多層的數(shù)組,轉(zhuǎn)為一層數(shù)組?叫做數(shù)組扁平化

????????var?arr?=?[1,?[2,?[3]]]

????????//?[1,2,3]

????????var?res?=?arr.join('');

????????res?=?res.split('');

????????console.log(res);

????????上面的方式遇到下面請(qǐng)情況就會(huì)有問(wèn)題

????????var?arr1?=?['1',['2',['3']]]

????????var?res?=?[]

????????//?var?a?=?0,b?=?3?一個(gè)var?聲明兩個(gè)變量;都有變量提升

????????for(var?i?=?0,len=?arr.length;i<len;i++){

????????????if(Array.isArray(arr[i])){

????????????????var?arr2?=?arr[i]

????????????????for(var?j?=?0;j<arr2.length;j++){

????????????????????if(Array.isArray(arr2[j])){

????????????????????????var?arr3?=?arr2[j]

????????????????????????for(var?k?=?0?;k<arr3.length;k++){

????????????????????????????res.push(arr3[k])

????????????????????????}

????????????????????}else{

????????????????????????res.push(arr2[j])

????????????????????}

????????????????}

????????????}else{

????????????????res.push(arr[i])

????????????}

????????}

????????console.log(res);

????????//?最開(kāi)始是循環(huán)數(shù)組?如果還是素組進(jìn)行遞歸處理

????????function?flatten(arr)?{

????????????//?初始化扁平化后的數(shù)組

????????????var?res?=?[];?

????????????//?遍歷?需要被扁平化的數(shù)組?arr

????????????for?(var?i?=?0,?len?=?arr.length;?i?<?len;?i++)?{

????????????????//?如果?arr[i]?是數(shù)組;進(jìn)行遞歸地處理

????????????????if?(Array.isArray(arr[i]))?{

????????????????????//?bug:?返回是最內(nèi)層的數(shù)組;

????????????????????//?res?=?flatten(arr[i])

????????????????????//?解決?將現(xiàn)在?res?與?扁平化的數(shù)組進(jìn)行合并處理

????????????????????res?=res.concat(flatten(arr[i]))

????????????????}?else?{

????????????????????//?如果不是數(shù)組,直接添加到res?上

????????????????????res.push(arr[i])

????????????????}

????????????}

????????????return?res;

????????}

????????var?res?=?flatten(arr)

????????console.log(res);



????????//?方法二:

????????//?//?這種方法有局限性?['1',['2','3',2],2]

????????function?flatten(arr){

????????????var?result?=?[]

????????????result?=?arr.toString().split(',').map(function(item){

????????????????return?+item;

????????????})

????????????return?result;

????????}



????????//?方式三:

????????//?我們對(duì)數(shù)組處理;最終都是為了返回一個(gè)值。reduce

????????function?flatten(arr)?{

????????????return?arr.reduce(function?(pre,?item)?{

????????????????//?return?pre.concat(item)

????????????????return?pre.concat(Array.isArray(item)???flatten(item)?:?item)

????????????},?[])

????????}

????????var?res?=?flatten([1,?2,?3,?[1,?2]])

????????console.log(res);

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容