??//?什么是數(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ì)有問題
????????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);
????????//?最開始是循環(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);