亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

JavaScript數組合并的多種方法

2019-11-20 09:57:47
字體:
來源:轉載
供稿:網友

這是一篇簡單的文章,關于JavaScript數組使用的一些技巧。我們將使用不同的方法結合/合并兩個JS數組,以及討論每個方法的優點/缺點。

讓我們先考慮下面這情況:

var a = [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ];var b = [ "foo", "bar", "baz", "bam", "bun", "fun" ];

很顯然最簡單的結合結果應該是:

[  1, 2, 3, 4, 5, 6, 7, 8, 9,  "foo", "bar", "baz", "bam" "bun", "fun"]

concat(..)

這是最常見的做法:

var c = a.concat( b );a; // [1,2,3,4,5,6,7,8,9]b; // ["foo","bar","baz","bam","bun","fun"]c; // [1,2,3,4,5,6,7,8,9,"foo","bar","baz","bam","bun","fun"]

正如你所看到的,C是一個全新的數組,表示a和b兩個數組的組合,并讓A和B不變。簡單吧?

但如果a有10,000個元素,而b也有一萬個元素? C就會有2萬個元素,所以a和b的內內存使用就會翻倍。

“沒問題!”,你說。讓它們被垃圾回收,把A和B設置為null,問題解決了!

a = b = null; // 'a'和'b'就被回收了
呵呵。對于只有幾個元素的小數組,這沒啥問題。但對于大數組,或者在內存有限的系統中需要經常重復這個過程,它其實還有很多改進的地方。

循環插入

好吧,讓我們將一個數組的內容復制到另一個,使用: Array#push(..)

// `b` onto `a`for (var i=0; i < b.length; i++) {  a.push( b[i] );}a; // [1,2,3,4,5,6,7,8,9,"foo","bar","baz","bam","bun","fun"]b = null;

現在,數組a有了數組b的內容。

似乎有更好的內存占用。

但如果a數組比較???出于內存和速度的原因,你可能要把更小的a放到b的前面,。沒問題,只需將push(..)換成unshift(..)即可:

// `a` into `b`:for (var i=a.length-1; i >= 0; i--) {  b.unshift( a[i] );}b; // [1,2,3,4,5,6,7,8,9,"foo","bar","baz","bam","bun","fun"]

功能技巧

不過for循環確實比較丑,而且不好維護。我們可以做的更好嗎?

這是我們的第一次嘗試,使用Array#reduce:

// `b` onto `a`:a = b.reduce( function(coll,item){  coll.push( item );  return coll;}, a );a; // [1,2,3,4,5,6,7,8,9,"foo","bar","baz","bam","bun","fun"]// or `a` into `b`:b = a.reduceRight( function(coll,item){  coll.unshift( item );  return coll;}, b );b; // [1,2,3,4,5,6,7,8,9,"foo","bar","baz","bam","bun","fun"]

Array#reduce(..) Array#reduceRight(..)是不錯的,但他們是一點點笨拙。 ES6=>的箭頭函數將減少一些代碼量,但它仍然需要一個函數,每個元素都需要調用一次,不是很完美。

那這個怎么樣:

// `b` onto `a`:a.push.apply( a, b );a; // [1,2,3,4,5,6,7,8,9,"foo","bar","baz","bam","bun","fun"]// or `a` into `b`:b.unshift.apply( b, a );b; // [1,2,3,4,5,6,7,8,9,"foo","bar","baz","bam","bun","fun"]

這是一個要好很多吧?特別是因為 unshift(..)方法在這里并不需要擔心前面的反向排序。 ES6的spead操作會更漂亮: a.push( …b ) 或 b.unshift( …a

數組最大長度限制

第一個主要的問題是,內存使用量增長了一倍(當然只是暫時的?。┍蛔芳觾热莼旧鲜峭ㄟ^函數調用將元素復制到堆棧中。此外,不同的JS引擎都有拷貝數據長度的限制。

所以,如果數組有一百萬個元素,你肯定會超出了push(…)或unshift(…)允許調用堆棧的限制。唉,處理幾千個元素它會做得很好,但你必須要小心,不能超過合理的長度限值。

注意: 你可以嘗試一下splice(…),它跟push(…)和unshift(…)一樣都有這種問題。

有一種方法可以避免這種最大長度限制。

function combineInto(a,b) {  var len = a.length;  for (var i=0; i < len; i=i+5000) {    b.unshift.apply( b, a.slice( i, i+5000 ) );  }}

等一下,我們的可讀性倒退了。 就這樣吧,可能會越改越差。

以上就是本文的全部內容,希望對大家學習javascript程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
九九热最新视频//这里只有精品| 自拍偷拍亚洲精品| 琪琪亚洲精品午夜在线| 69av成年福利视频| 欧美国产激情18| 青青久久aⅴ北条麻妃| 国产精品va在线播放| 欧美精品www在线观看| 国产精品高清在线观看| 国产精品久久久一区| 亚洲欧美日韩精品久久奇米色影视| 欧美日韩成人免费| 北条麻妃一区二区三区中文字幕| 欧美一级高清免费| 91探花福利精品国产自产在线| 日韩成人在线观看| 亚洲美女在线观看| 久久久久久综合网天天| 久久99热精品这里久久精品| 欧洲成人免费aa| 亚洲视频在线播放| 亚洲一区二区三区在线视频| 国产精品99一区| 欧美在线欧美在线| 亚洲精品99999| 亚洲色图综合久久| 日韩欧美精品免费在线| 久久99精品久久久久久琪琪| 精品国产91久久久久久老师| 青青草一区二区| 亚洲第一网中文字幕| 欧美夜福利tv在线| 国产精品美女www爽爽爽视频| 久久久久中文字幕| 国产日韩视频在线观看| 97免费视频在线播放| 国产精品久久久久7777婷婷| 97在线视频一区| 中文字幕精品网| 国产美女高潮久久白浆| 亚洲另类图片色| 国产成人jvid在线播放| 亚洲自拍小视频免费观看| 中文字幕亚洲欧美日韩2019| 日本亚洲欧美三级| 国内成人精品视频| 91精品在线影院| 不卡av在线网站| 久久国产精品影视| 午夜精品视频在线| 国产精品99导航| 国产精品视频成人| 国产激情久久久| 中文在线资源观看视频网站免费不卡| 欧美寡妇偷汉性猛交| 亚洲日韩第一页| 亚洲美腿欧美激情另类| 自拍偷拍亚洲在线| 日本一区二区三区四区视频| 亚洲丁香婷深爱综合| 青青草一区二区| 日产精品久久久一区二区福利| 欧美乱人伦中文字幕在线| 亚洲性视频网址| 美女少妇精品视频| 国产在线观看精品| 日韩精品在线视频美女| 国产精品成熟老女人| 久久777国产线看观看精品| 91国语精品自产拍在线观看性色| 97视频在线观看视频免费视频| 亚洲曰本av电影| 久久视频中文字幕| 国产精品久久久久免费a∨大胸| 欧美精品一区二区三区国产精品| 国产精品自产拍在线观看| 精品在线观看国产| 日韩av一区二区在线观看| 国产精品久久久久久久久久新婚| 18久久久久久| 亚洲网站视频福利| 视频一区视频二区国产精品| 欧洲成人免费视频| 91久久精品国产91性色| 日韩av色综合| 亚洲影视九九影院在线观看| 国产欧美精品一区二区| 中文字幕9999| 夜夜躁日日躁狠狠久久88av| 国产v综合ⅴ日韩v欧美大片| 日韩国产精品亚洲а∨天堂免| 国产精品日韩欧美综合| 在线观看91久久久久久| 日韩av免费在线播放| 亚洲夜晚福利在线观看| 久久精品国产69国产精品亚洲| 久热爱精品视频线路一| 国产精品久久久久久久一区探花| 欧美日韩国产成人在线观看| 亚洲欧美日韩在线高清直播| 69视频在线播放| 亚洲成人久久久| 成人免费在线视频网站| 国色天香2019中文字幕在线观看| 日日骚av一区| 国产日韩在线免费| 日韩最新免费不卡| 欧美激情国产日韩精品一区18| 中文字幕亚洲欧美日韩在线不卡| 亚洲精品白浆高清久久久久久| 亚洲欧美综合精品久久成人| 国产精品久久久91| 亚洲欧美www| 影音先锋欧美精品| 欧美乱大交做爰xxxⅹ性3| 亚洲人成电影网站色…| 亚洲国产另类 国产精品国产免费| 久久人人97超碰精品888| 国产精品一区二区三| 91视频-88av| zzijzzij亚洲日本成熟少妇| 国产精品高清免费在线观看| 91精品国产自产91精品| 色婷婷av一区二区三区久久| 中文字幕日韩欧美| 久久的精品视频| 国产日韩av高清| 色综合91久久精品中文字幕| 国产精品69久久久久| 欧美一级电影在线| 久久中文久久字幕| 国产日韩在线观看av| 精品一区精品二区| 欧美放荡办公室videos4k| 日本亚洲欧美成人| 中文在线不卡视频| 国产精品99久久久久久www| 精品久久久久久亚洲国产300| 丁香五六月婷婷久久激情| 国产成人综合久久| 精品无码久久久久久国产| 久久视频在线观看免费| 一区二区av在线| 亚洲国产日韩欧美在线图片| 久久亚洲国产精品| 久久男人av资源网站| 疯狂做受xxxx欧美肥白少妇| 俺去了亚洲欧美日韩| 国产91色在线播放| www高清在线视频日韩欧美| 亚洲第五色综合网| 亚洲乱码国产乱码精品精| 欧美在线一级视频| 日韩在线视频二区| 亚洲欧美日韩精品久久| 精品久久久久久| 国产成人激情小视频| 久热国产精品视频| 国产欧美日韩高清| 欧美中文字幕在线播放| 亚洲国产精品99久久| 亚洲精品少妇网址| 成人免费午夜电影| 亚洲影视九九影院在线观看|