日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

JS數組降維的實現Array.prototype.concat.apply([], arr)

瀏覽:217日期:2024-05-11 14:58:13

把多維數組(尤其是二維數組)轉化為一維數組是業務開發中的常用邏輯,最近跟著黃軼老師學習Vue2.6.1.1版本源碼時,看到源碼對二維數組降維的代碼,所以這里來寫一篇,記錄一下,加強印象

二維數組降為一維數組

循環降維

let children = [1, 2, 3, [4, 5, 6], 7, 8, [9, 10]];function simpleNormalizeChildren(children) { let reduce = []; for (let i = 0; i < children.length; i++) { if (Array.isArray(children[i])) { for (let j = 0; j < children[i].length; j++) { reduce.push(children[i][j]); } } else { reduce.push(children[i]); } } return reduce;}simpleNormalizeChildren(children) // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

此方法思路簡單,利用雙重循環遍歷二維數組中的每個元素并放到新數組中。

concat降維

MDN上對于concat的介紹

“concat creates a new array consisting of the elements in the object on which it is called, followed in order by, for each argument, the elements of that argument (if the argument is an array) or the argument itself (if the argument is not an array).”

concat

如果concat方法的參數是一個元素,該元素會被直接插入到新數組中;如果參數是一個數組,該數組的各個元素將被插入到新數組中;將該特性應用到代碼中:

let children = [1, 2, 3, [4, 5, 6], 7, 8, [9, 10]];function simpleNormalizeChildren(children) { let reduce = []; for (let i = 0; i < children.length; i++) { reduce = reduce.concat(children[i]); } return reduce;}simpleNormalizeChildren(children) // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

children 的元素如果是一個數組,作為concat方法的參數,數組中的每一個子元素會被獨立插入進新數組。利用concat方法,我們將雙重循環簡化為了單重循環。

apply和concat降維

MDN上對于apply方法的介紹

“The apply() method calls a function with a given this value and arguments provided as an array.”

apply

apply方法會調用一個函數,apply方法的第一個參數會作為被調用函數的this值,apply方法的第二個參數(一個數組,或類數組的對象)會作為被調用對象的arguments值,也就是說該數組的各個元素將會依次成為被調用函數的各個參數;將該特性應用到代碼中:

let children = [1, 2, 3, [4, 5, 6], 7, 8, [9, 10]];function simpleNormalizeChildren(children) { return Array.prototype.concat.apply([], children);}simpleNormalizeChildren(children) // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

children作為apply方法的第二個參數,本身是一個數組,數組中的每一個元素(還是數組,即二維數組的第二維)會被作為參數依次傳入到concat中,效果等同于[].concat(1, 2, 3, [4, 5, 6], 7, 8, [9, 10])。利用apply方法,我們將單重循環優化為了一行代碼

Vue2.6.11版本源碼降維

let children = [1, 2, 3, [4, 5, 6], 7, 8, [9, 10]];// :any 可以去掉 這里是Vue通過Flow指定傳入的參數類型可以是任意類型function simpleNormalizeChildren(children: any) { for (let i = 0; i < children.length; i++) { if (Array.isArray(children[i])) { return Array.prototype.concat.apply([], children); } } return children;}simpleNormalizeChildren(children); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

多維數組降為一維數組

遞歸降維

遞歸函數就是在函數體內調用自己;

遞歸函數的使用要注意函數終止條件避免死循環;

// 多維數組let children = [1, [2,3], [4, [5, 6, [7, 8]]], [9, 10]];function simpleNormalizeChildren(children) { for (let i = 0; i < children.length; i++) { if (Array.isArray(children[i])) { children = Array.prototype.concat.apply([], children); for(let j =0; j<children.length; j++) { simpleNormalizeChildren(children) } } } return children;}simpleNormalizeChildren(children); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

到此這篇關于JS數組降維的實現Array.prototype.concat.apply([], arr)的文章就介紹到這了,更多相關JS數組降維內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: JavaScript
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美一区二区三区高清视频| 综合亚洲自拍| 国产欧美日韩一级| 亚洲日韩视频| 欧美日韩国产一区精品一区| 日韩不卡视频在线观看| 91精品推荐| 亚洲视频播放| 亚洲欧洲美洲国产香蕉| 亚洲91在线| 久久国产婷婷国产香蕉| 国产精品嫩草影院在线看| 国产精品伦一区二区| 精品日产乱码久久久久久仙踪林| 荡女精品导航| 亚洲大片在线| 国产精品毛片一区二区三区| 蜜臀精品一区二区三区在线观看 | 91精品一区二区三区综合在线爱 | 久久av免费看| a天堂资源在线| 精品日韩毛片| 亚洲天堂日韩在线| 久久国产三级精品| 久久久久久色| 国产精品magnet| 欧美黄色一区二区| 日韩国产激情| 视频一区欧美日韩| 国产欧美日韩亚洲一区二区三区| 精品亚洲自拍| 不卡在线一区二区| 日韩精品社区| 国产在线一区不卡| 最新亚洲一区| 欧美成人精品一级| 精品丝袜在线| 亚洲另类av| 久久久久亚洲精品中文字幕| 亚洲啊v在线| 亚洲深爱激情| 97久久精品| 亚洲一级影院| 精品视频亚洲| 日本在线不卡视频一二三区| 国内精品福利| 国产精品白丝久久av网站| 91精品电影| 国产成人免费av一区二区午夜| 伊人久久亚洲| 欧美亚洲在线日韩| 福利视频一区| 国产精品久av福利在线观看| 欧美中文字幕| 精品丝袜在线| 精品视频一二| 美国欧美日韩国产在线播放| 激情六月综合| 理论片午夜视频在线观看| 久久国产精品色av免费看| 亚洲一区二区三区高清不卡| 日本精品影院| 色一区二区三区四区| 国产日韩欧美中文在线| 久久一二三区| 亚洲女同一区| 99久久亚洲精品蜜臀| av中文资源在线资源免费观看| 国产精品日韩精品在线播放| 日本电影久久久| 免费观看在线综合| 色爱av综合网| 六月丁香综合| 日韩av中文在线观看| 国产一区亚洲| 麻豆高清免费国产一区| 日韩精品一级二级| 99精品视频精品精品视频| 精品三级av| 麻豆成人91精品二区三区| 国产精品久久久久久久免费软件| 亚洲3区在线| 亚洲日韩视频| 亚州av一区| 亚洲aa在线| 日韩高清电影一区| 亚洲97av| 日韩高清成人在线| 日韩中文字幕在线一区| 日韩在线视频一区二区三区| 亚洲我射av| 亚洲人成精品久久久| 亚洲开心激情| 日韩极品在线观看| 日韩av不卡一区二区| 欧美日韩18| 国产精品极品国产中出| 久久一区亚洲| 高清日韩中文字幕| 中文字幕在线看片| 综合日韩av| 蜜臀国产一区| 久久亚洲国产| 国产精品女主播一区二区三区| 亚洲在线国产日韩欧美| 免费日韩av片| 亚洲精品在线国产| 日韩国产欧美在线播放| 日韩av一区二区三区| 国产精品色在线网站| 久久精品三级| 亚洲精品在线影院| 在线日韩中文| 麻豆9191精品国产| 日韩精品导航| 麻豆精品视频在线观看视频| 成人在线视频免费| 国内精品99| 日韩亚洲精品在线观看| 麻豆久久久久久| 久久精品免费一区二区三区| 亚洲免费观看| 日韩av一级片| 国产91欧美| 蜜桃视频欧美| 亚洲精品综合| 国产精品22p| 日韩综合精品| 亚洲一区网站| 国产伦理久久久久久妇女| 精品久久99| 久久久人人人| 中文一区一区三区免费在线观| 国产精品久久国产愉拍| 亚洲黄色免费看| 99视频一区| 国产精品一区三区在线观看| 色婷婷亚洲mv天堂mv在影片| 欧美女激情福利| 欧美日韩91| 日韩电影二区| 视频一区国产视频| 你懂的国产精品永久在线| 亚洲不卡系列| 日本在线观看不卡视频| 福利视频一区| 亚洲欧美日韩国产一区二区| 国产日韩三级| 精品在线99| 日本精品另类| 亚洲精品一区三区三区在线观看| 在线精品福利| 日本激情一区| 美国三级日本三级久久99| 精品一区二区三区亚洲| 国产精品普通话对白| 久久免费福利| 国产精品腿扒开做爽爽爽挤奶网站| 欧美一区免费| 欧美日韩一二| 国产午夜久久av| 激情久久五月| 国产精品极品| 在线午夜精品| 国产精品观看| 久久午夜精品| 欧美一级鲁丝片| 91精品国产自产在线丝袜啪| 日韩中文视频| 国产精品久久乐| 亚洲欧美不卡| 在线看片国产福利你懂的| 日韩免费精品| 国产99精品| 精品亚洲二区| 日韩高清国产一区在线| 日韩中文在线电影| 国产欧美一区| 视频一区视频二区中文| 日韩伦理一区| 国产精品主播| 蜜桃视频一区二区三区在线观看| 日韩精品第一区| 国产精品最新| 免费国产亚洲视频| 久久国产中文字幕| 久久精品理论片| 日本不卡一区二区三区| 一区免费视频| 久久视频一区| 丰满少妇一区| 91亚洲精品在看在线观看高清| 99视频精品全部免费在线视频| 久久不卡日韩美女| 涩涩涩久久久成人精品| 好吊一区二区三区| 日本欧美不卡| 91一区二区三区四区| 美女视频黄免费的久久| 欧美日韩亚洲一区二区三区在线|