js中flat方法的實現原理

2021-09-27 12:32:31 字數 1495 閱讀 7533

let arr = [1, [2, 3, [4, 5, [12, 3, "zs"], 7, [8, 9, [10, 11, [1, 2, [3, 4]]]]]]];

console.log(arr.flat(infinity));//[1, 2, 3, 4, 5, 12, 3, "zs", 7, 8, 9, 10, 11, 1, 2, 3, 4]

1、首先進行型別判斷,需要判斷當前呼叫方法的this是否為乙個陣列,若不是陣列則返回undefined,array下有乙個isarray的方法可以檢測是否為乙個陣列,下面我提供一種萬能的型別檢測方法

//萬能的型別檢測方法

const

checktype

=(arr)

=>

2、遍歷陣列,並判斷內部的子元素是否也是陣列,如果是陣列則繼續拆(使用到遞迴和閉包),若不是則直接放入預先建立的新陣列

let arr =[1

,[2,

3,[4

,5,[

12,3,

"zs"],

7,[8

,9,[

10,11,

[1,2

,[3,

4]]]

]]]]

;//萬能的型別檢測方法

const

checktype

=(arr)

=>

//自定義flat方法,注意:不可以使用箭頭函式,使用後內部的this會指向window

array.prototype.

myflat

=function

(num)

//遍歷所有子元素並判斷型別,若為陣列則繼續遞迴,若不為陣列則直接加入新陣列

this

.foreach

((item)

=>

//使用三點運算子解構,遞迴函式返回的陣列,並加入新陣列

result.

push

(...item.

myflat

(num));

}else})

return result;

} console.

time()

; console.

log(arr.

flat

(infinity))

;//[1, 2, 3, 4, 5, 12, 3, "zs", 7, 8, 9, 10, 11, 1, 2, 3, 4];

console.

log(arr.

myflat

(infinity))

;//[1, 2, 3, 4, 5, 12, 3, "zs", 7, 8, 9, 10, 11, 1, 2, 3, 4];

//自定義方法和自帶的flat返回結果一致!!!!

console.

timeend()

;

陣列的flat方法

封裝排序方法,asc 公升序 desc 降序 let lessons function order field,type asc let hd lessons.sort order a desc flat方法 array.prototype.flat 用於將巢狀的陣列 拉平 變成一維陣列。該方法返回...

js實現陣列的filter方法 實現原理

首先需要知道filter的作用是什麼,使用方法 那麼就能實現乙個filter 對於類似的實現原理也是這樣的思路 filter是過濾的含義,適用於過濾陣列,返回乙個新的陣列 使用方法如下 a 1,2,5,8,7 let m a.filter function item,index,arr consol...

js中new的原理與實現

這裡使用es6的結構來獲取建構函式所需的引數 也可以使用arguments來獲取,不過es6中不這麼建議了,要用的話進行arguments 0 的提取與裁剪就可以了 function new fn,args 構造空物件 fn.obj,args 建構函式賦值與this指向的修改 obj.proto f...