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...