手動實現flat函式

2021-10-10 10:22:28 字數 1890 閱讀 3035

首先何謂陣列扁平化?

我也不會解釋,直接上**,就很直觀

//這是原始陣列,可以看到巢狀了很多層的,也就是很多維陣列

let arr =[1

,2,[

2,3]

,[10,

11],[

3,[4

,[5,

[6,[

7,[8

,[9]

]]]]

]]];

array.flat函式支援傳入乙個數值型別引數n,代表我們希望的能夠扁平化的維數

,2,2

,3,10

,11,3

,[4,

[5,[array]]]

],2,2

,3,10

,11,3

,4,[

5,[6

,[array]]]

]//..

//infinity----代表無窮,也就是扁平化所有

,2,2

,3,10

,11,3

,4,5

,6,7

,8,9

]

也就是flat會從外到裡的不斷的消除[ ]

我們先分步對需要考慮的問題逐個過一遍,然後再組合到一起

3.1 引數 n 的型別

引數n的型別必須是number,所以應該首先對這個進行判斷,如果n不是number型別,就直接丟擲乙個錯誤

if

(typeof n !=

'number'

)

3.2 n 的大小

如果n==0,那就是說不用進行降維,就直接返回原陣列就好了

if

(num ==0)

3.3 對陣列元素的型別進行判斷
let flag =

true

;//設定乙個標誌,如果flag的值不變就說明陣列中沒有子陣列了,就直接返回當前的陣列,要進行沒必要的迴圈

//因為存在infinity,所以光靠n是沒有沒有辦法終結程式的

let newarr =

;for

(let i =

0;i <

this

.length;i++

)else

}

3.4 程式的終止
if

(n <

0|| flag)

else

3.5 最終的**
array.prototype.

myflat

=function

(num)if(

typeof num !=

'number'

)let flag =

true

;let newarr =

;for

(let i =

0;i <

this

.length;i++

)else}if

(num <

0|| flag)

else

}let arr =[1

,2,[

2,3]

,[10,

11],[

3,[4

,[5,

[6,[

7,[8

,[9]

]]]]

]]];

console.

log(arr.

myflat(1

));//呼叫方式

好了,基本就是這樣了。

3 flat函式設計

演算法題 輸入 a b c 2,d e f g 3,4 輸出 a,b,c,2,d,e,f,g,3,4 const arr a b c 2,d e f g 3,4 方式一 遞迴 太多已省略 方式二 tostring 格式轉換 隱式型別轉換 1,2,3 tostring 1,2,3 方式三 valueo...

手動實現函式 atoi

atoi 函式用來將字串轉換成整數 int 其原型為 int atoi const char str 函式說明 atoi 函式會掃瞄引數 str 字串,跳過前面的空白字元 例如空格,tab縮排等,可以通過 isspace 函式來檢測 直到遇上數字或正負符號才開始做轉換,而再遇到非數字或字串結束時 0...

開方函式手動實現

曾經面試讓手動實現保留2位小數的函式,現在想來將其發出來 排版可能不好,因為csdn體驗度本來就差 實現思想 利用二分法找整數,迴圈迭代找小數。例如 111開方,保留兩位小數。10 a 2 111 a 2 2 10 a 11 a 0.55 a 2 20 因為0 0.05 0.5所以小數第一位為5 然...