JavaScript Array實(shí)例方法flat的實(shí)現(xiàn)
Array.prototype.flat()
flat() 方法用于將一個(gè)嵌套多層的數(shù)組進(jìn)行扁平,返回新數(shù)組。它不會(huì)改變?cè)紨?shù)組。 flat 方法在處理多維數(shù)組時(shí)非常有用,它可以讓數(shù)組操作變得更加靈活和簡(jiǎn)潔。
語(yǔ)法
flat() flat(depth)
參數(shù)
depth(可選):指定要扁平的深度,默認(rèn)值為 1。
返回值
一個(gè)新的數(shù)組,其中包含扁平完的數(shù)組元素。
用法
const arr = [0, 1, 2, [3, 4]] arr.flat() // [0, 1, 2, 3, 4]
描述
flat() 方法會(huì)忽略稀疏數(shù)組中的空槽
。
flat() 方法是個(gè)淺拷貝方法
,它不會(huì)改變?cè)瓟?shù)組。
它只需要 this
值具有 length
屬性和整數(shù)鍵屬性即可。但是,如果要展開(kāi)元素,則它們必須是數(shù)組
。
實(shí)現(xiàn) flat 方法
從上面 flat 描述總結(jié)實(shí)現(xiàn) flat 時(shí)注意實(shí)現(xiàn)這三點(diǎn)。
- 需要一個(gè)參數(shù),默認(rèn)值為 1。
- flat 會(huì)忽略稀疏數(shù)組中的空槽。
- 展開(kāi)的元素必須是數(shù)組。
Array.prototype.myFlat = function (depth = 1) { // 需要一個(gè)參數(shù),默認(rèn)值為 1 const result = [] const flatten = (arr, currentDepth) => { for (let i = 0; i < arr.length; i++) { if (Object.hasOwn(arr, i)) { // 忽略稀疏數(shù)組的空槽 if (Array.isArray(arr[i]) && currentDepth < depth) { // 展開(kāi)的元素必須是數(shù)組 flatten(arr[i], ++currentDepth) } else { result.push(arr[i]) } } } } flatten(this, 0) return result }
測(cè)試用例
Array.prototype.myFlat = function (depth = 1) { const result = [] const flatten = (arr, currentDepth) => { for (let i = 0; i < arr.length; i++) { if (Object.hasOwn(arr, i)) { if (Array.isArray(arr[i]) && currentDepth < depth) { flatten(arr[i], ++currentDepth) } else { result.push(arr[i]) } } } } flatten(this, 0) return result } console.log('扁平普通數(shù)組') const arr1 = [1, 2, [3, 4]] console.log(arr1.myFlat()) console.log(arr1.flat()) // [1, 2, 3, 4] const arr2 = [1, 2, [3, 4, [5, 6]]] console.log(arr2.myFlat()) console.log(arr2.flat()) // [1, 2, 3, 4, [5, 6]] const arr3 = [1, 2, [3, 4, [5, 6]]] console.log(arr3.myFlat(2)) console.log(arr3.flat(2)) // [1, 2, 3, 4, 5, 6] const arr4 = [1, 2, [3, 4, [5, 6, [7, 8, [9, 10]]]]] console.log(arr4.myFlat(Infinity)) console.log(arr4.flat(Infinity)) // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] console.log('稀疏數(shù)組中使用 flat') const arr5 = [1, 2, , 4, 5] console.log(arr5.myFlat()) console.log(arr5.flat()) // [1, 2, 4, 5] const arr6 = [1, , 3, ["a", , "c"]] console.log(arr6.myFlat()) console.log(arr6.flat()) // [ 1, 3, "a", "c" ] const arr7 = [1, , 3, ["a", , ["d", , "e"]]] console.log(arr7.myFlat()) console.log(arr7.flat()) // [ 1, 3, "a", ["d", empty, "e"] ] console.log(arr7.myFlat(2)) console.log(arr7.flat(2)) // [ 1, 3, "a", "d", "e"] console.log('在非數(shù)組對(duì)象上使用 flat') const arrayLike = { length: 3, 0: [1, 2], 1: { length: 2, 0: 3, 1: 4 }, 2: 5, } console.log(Array.prototype.myFlat.call(arrayLike)) console.log(Array.prototype.flat.call(arrayLike)) // [1, 2, { "0": 3, "1": 4, "length": 2 }, 5]
結(jié)語(yǔ)
到這里 Array 實(shí)例方法 flat 實(shí)現(xiàn)完成啦。
到此這篇關(guān)于JavaScript Array實(shí)例方法flat的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)JavaScript Array flat實(shí)現(xiàn)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
簡(jiǎn)單介紹JavaScript數(shù)據(jù)類型之隱式類型轉(zhuǎn)換
這篇文章主要介紹了簡(jiǎn)單介紹JavaScript數(shù)據(jù)類型之隱式類型轉(zhuǎn)換的相關(guān)資料,需要的朋友可以參考下2015-12-12js 實(shí)現(xiàn)在2d平面上畫(huà)8的方法
今天小編就為大家分享一篇js 實(shí)現(xiàn)在2d平面上畫(huà)8的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-10-10JavaScript變量提升和嚴(yán)格模式實(shí)例分析
這篇文章主要介紹了JavaScript變量提升和嚴(yán)格模式,結(jié)合實(shí)例形式分析了javascript變量提升和嚴(yán)格模式的原理及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2019-01-01javascript面向?qū)ο蟪绦蛟O(shè)計(jì)實(shí)踐常用知識(shí)點(diǎn)總結(jié)
這篇文章主要介紹了javascript面向?qū)ο蟪绦蛟O(shè)計(jì)實(shí)踐常用知識(shí)點(diǎn),結(jié)合實(shí)例形式總結(jié)分析了javascript面向?qū)ο蟪绦蛟O(shè)計(jì)中原型引用類型、屬性、方法相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2019-07-07在JavaScript中使用mqtt.js的詳細(xì)過(guò)程
這篇文章主要介紹了在JavaScript中使用mqtt.js的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04js如何監(jiān)聽(tīng)input輸入事件及使用防抖封裝函數(shù)處理方法
這篇文章主要給大家介紹了關(guān)于js如何監(jiān)聽(tīng)input輸入事件及使用防抖封裝函數(shù)處理方法的相關(guān)資料,最近有一個(gè)需求,需要我們實(shí)時(shí)監(jiān)聽(tīng)input輸入框中的內(nèi)容,從而帶來(lái)更好的用戶體驗(yàn),需要的朋友可以參考下2023-07-07詳解javascript實(shí)現(xiàn)自定義事件
這篇文章主要為大家介紹了javascript實(shí)現(xiàn)自定義事件的方法,自定義事件,顧名思義,就是自己定義事件類型,自己定義事件處理函數(shù),javascript如何實(shí)現(xiàn)自定義事件,需要了解的朋友可以參考下2016-01-01