最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript數(shù)組合并的多種方法

 更新時間:2016年05月22日 13:46:02   投稿:lijiao  
這篇文章主要為大家詳細介紹了JavaScript數(shù)組合并的多種方法,感興趣的朋友可以參考一下

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

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

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是一個全新的數(shù)組,表示a和b兩個數(shù)組的組合,并讓A和B不變。簡單吧?

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

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

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

循環(huán)插入

好吧,讓我們將一個數(shù)組的內(nèi)容復制到另一個,使用: 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;

現(xiàn)在,數(shù)組a有了數(shù)組b的內(nèi)容。

似乎有更好的內(nèi)存占用。

但如果a數(shù)組比較?。砍鲇趦?nèi)存和速度的原因,你可能要把更小的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循環(huán)確實比較丑,而且不好維護。我們可以做的更好嗎?

這是我們的第一次嘗試,使用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=>的箭頭函數(shù)將減少一些代碼量,但它仍然需要一個函數(shù),每個元素都需要調(diào)用一次,不是很完美。

那這個怎么樣:

// `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

數(shù)組最大長度限制

第一個主要的問題是,內(nèi)存使用量增長了一倍(當然只是暫時的?。┍蛔芳觾?nèi)容基本上是通過函數(shù)調(diào)用將元素復制到堆棧中。此外,不同的JS引擎都有拷貝數(shù)據(jù)長度的限制。

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

注意: 你可以嘗試一下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 ) );
  }
}

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

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

相關文章

  • webpack 代碼分離優(yōu)化快速指北

    webpack 代碼分離優(yōu)化快速指北

    這篇文章主要介紹了webpack 代碼分離優(yōu)化快速指北,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05
  • JS項目中對本地存儲進行二次的封裝的實現(xiàn)

    JS項目中對本地存儲進行二次的封裝的實現(xiàn)

    這篇文章主要介紹了JS項目中對本地存儲進行二次的封裝,這里我們將要使用到的key存儲下來,新建一個叫constant-storage.js的文件,對外暴露一些key的鍵名,也方便后期統(tǒng)一修改,這里因為都是恒量,所以名稱我們都用大寫表示,需要的朋友可以參考下
    2022-07-07
  • JS表單驗證方法實例小結【電話、身份證號、Email、中文、特殊字符、身份證號等】

    JS表單驗證方法實例小結【電話、身份證號、Email、中文、特殊字符、身份證號等】

    這篇文章主要介紹了JS表單驗證方法,結合實例形式總結分析了常用的表單驗證技巧,包括電話、身份證號、Email、中文、特殊字符、身份證號等驗證方法,需要的朋友可以參考下
    2017-02-02
  • JavaScript獲得當前網(wǎng)頁來源頁面(即上一頁)的方法

    JavaScript獲得當前網(wǎng)頁來源頁面(即上一頁)的方法

    這篇文章主要介紹了JavaScript獲得當前網(wǎng)頁來源頁面(即上一頁)的方法,涉及javascript中document.referrer方法的使用技巧,需要的朋友可以參考下
    2015-04-04
  • JavaScript的String字符串對象常用操作總結

    JavaScript的String字符串對象常用操作總結

    String對象用于存儲字符串數(shù)據(jù),這里我們做了JavaScript的String字符串對象常用操作總結,需要的朋友可以參考下
    2016-05-05
  • uni-app常用的幾種頁面跳轉方式總結

    uni-app常用的幾種頁面跳轉方式總結

    uni-app的頁面跳轉和小程序和vue很相似,只是方法和標簽有所不同,這篇文章主要給大家介紹了關于uni-app常用的幾種頁面跳轉方式,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-08-08
  • 關于RxJS Subject的學習筆記

    關于RxJS Subject的學習筆記

    這篇文章主要介紹了關于RxJS Subject的學習筆記,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12
  • js打印紙函數(shù)代碼(遞歸)

    js打印紙函數(shù)代碼(遞歸)

    js打印紙函數(shù)代碼,獲取并設置打印紙的具體信息的代碼,需要的朋友可以參考下。
    2010-06-06
  • js代碼規(guī)范之Eslint安裝與配置詳解

    js代碼規(guī)范之Eslint安裝與配置詳解

    這篇文章主要介紹了js代碼規(guī)范之Eslint安裝與配置詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-09-09
  • Js md5加密網(wǎng)頁版MD5轉換代碼

    Js md5加密網(wǎng)頁版MD5轉換代碼

    Js實現(xiàn)網(wǎng)頁上的MD5加密功能,將文字轉換為MD5字符,本代碼調(diào)用簡單,你可以新建一個網(wǎng)頁,將此網(wǎng)頁上傳到你的服務器上,用戶瀏覽網(wǎng)頁,就可實現(xiàn)MD5加密轉換功能,用戶可方便查詢?nèi)我蛔址腗D5碼,很不錯的功能
    2013-03-03

最新評論

彰化市| 辛集市| 和硕县| 玛多县| 潞西市| 定襄县| 榆林市| 商城县| 原阳县| 重庆市| 汉源县| 嘉禾县| 昆山市| 武定县| 金川县| 宝山区| 梓潼县| 五指山市| 乌拉特中旗| 静乐县| 铅山县| 铅山县| 凭祥市| 扶绥县| 沙湾县| 绥芬河市| 米脂县| 枣强县| 那坡县| 深水埗区| 开化县| 东乌| 霞浦县| 四会市| 桃园县| 应城市| 化州市| 鸡泽县| 武平县| 修文县| 湟源县|