亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

javascript使用 concat 方法對數(shù)組進行合并的方法

 更新時間:2016年09月08日 14:09:30   作者:Uncle-Keith  
這篇文章主要介紹了javascript使用 concat 方法對數(shù)組進行合并的方法,本文介紹的非常詳細,具有參考借鑒價值,需要的朋友一起看看吧

在介紹前,拋出一個問題:如何將多個數(shù)組合并為一個數(shù)組?

以下的分享會分為如下小節(jié):

1.concat方法的基礎(chǔ)介紹

2.從實例中感受concat方法

1.concat方法的基礎(chǔ)介紹

  concat方法用于多個數(shù)組的合并。它將新數(shù)組的成員,添加到原數(shù)組的尾部,然后返回一個新數(shù)組,原數(shù)組不變。

console.log([].concat([1],[2],[3])); // [1, 2, 3]
console.log([].concat([[1],[2],[3]])); // [[1], [2], [3]]
console.log([].concat(4,[[5,6],[7]])); // [4, [5, 6], [7]]

  上面代碼中,第一個返回值是將一個空數(shù)組與三個數(shù)組[1],[2],[3]合并為一個數(shù)組,因此返回了[1, 2, 3]。第二個是將一個空數(shù)組與一個二維數(shù)組合并,二維數(shù)組的成員為[1],[2],[3],因此返回了[[1], [2], [3]],注意,返回的是二維數(shù)組。第三個例子同理。這里對概念的理解很重要,即將新數(shù)組的成員,添加到原數(shù)組的尾部。

  除了接受數(shù)組作為參數(shù),concat也可以接受其他類型的值作為參數(shù)。它們會作為新的元素,添加數(shù)組尾部。

console.log([].concat(1,2,3)); //[1,2,3];
//等同于
console.log([].concat(1,[2,3])); //[1,2,3];
console.log([].concat([1],[2,3])); //[1,2,3]; 

  這里雖然內(nèi)容較少,看起來挺簡單。但是真正理解起來真的不容易。

2.從實例中感受concat方法

  說完基礎(chǔ)的知識,給大家看看我最近遇到的一個題目。原題是這樣的。

  看例子就能明白是什么意思了。

  這道題目中,其中一個解決方案就是:

var flatten = function (arr){
return [].concat.apply([],arr);
};

  這一段簡單的函數(shù)就可以實現(xiàn)將數(shù)組中的元素合并的功能。但是當(dāng)我在理解這個返回值的時候,出現(xiàn)了一個問題。

  問題:為什么使用apply方法和沒有使用apply方法會有區(qū)別?

console.log([].concat.apply([],[[1],[2],[3]])); //[1, 2, 3]
console.log([].concat([[1],[2],[3]])); //[[1], [2], [3]]

 上面代碼中,同樣是在一個空數(shù)組中向尾部添加新數(shù)組,第一個返回的是[1,2,3]。第二個卻是一個二維數(shù)組。

  經(jīng)過一段時間的折騰,終于理解了其中不同的原因所在。

  首先,我們在空數(shù)組中調(diào)用實例方法concat的時候,是傳入concat中的參數(shù),在push到數(shù)組的末尾。也就是說,會將空數(shù)組與傳入的數(shù)組的最外層數(shù)組進行合并,然后返回一個新數(shù)組。

console.log([].concat(1,2,3)); //[1, 2, 3]
console.log([].concat([1],[2],[3])); //[1, 2, 3]
console.log([].concat([[1],[2],[3]])); //[[1], [2], [3]]
console.log([].concat([[[1],[2],[3]]])); // [[[1], [2], [3]]]

  上面代碼中,從幾個數(shù)組,到一維數(shù)組,二維數(shù)組,三維數(shù)組逐漸變化的。

  在Javascript中call,apply,bind方法的詳解與總結(jié) 文章中,有提到 apply方法的作用與call方法類似,也是改變this指向(函數(shù)執(zhí)行時所在的作用域),然后在指定的作用域中,調(diào)用該函數(shù)。同時也會立即執(zhí)行該函數(shù)。唯一的區(qū)別就是,它接收一個數(shù)組作為函數(shù)執(zhí)行時的參數(shù)。

  apply方法的第一個參數(shù)也是this所要指向的那個對象,如果設(shè)為null或undefined或者this,則等同于指定全局對象。第二個參數(shù)則是一個數(shù)組,該數(shù)組的所有成員依次作為參數(shù),在調(diào)用時傳入原函數(shù)。原函數(shù)的參數(shù),在call方法中必須一個個添加,但是在apply方法中,必須以數(shù)組形式添加。

console.log([].concat.apply([],[[1],[2],[3]])); //[1, 2, 3]
console.log([].concat([[1],[2],[3]])); //[[1], [2], [3]]

  從代碼可以看出,第一段代碼是先在空數(shù)組上先調(diào)用了concat方法,該方法的作用是將新數(shù)組的成員,添加到原數(shù)組的尾部。再調(diào)用了apply方法,傳入第一個參數(shù),指定對象執(zhí)行時所在的作用域,而第二個參數(shù)的作用是將數(shù)組中的所有成員一次作為參數(shù),在調(diào)用時傳入數(shù)組中。

  因此,在concat,apply方法同時使用的時候,兩個方法的作用會疊加,也就出現(xiàn)了與單獨使用concat不同的現(xiàn)象??磦€例子。

console.log([].concat([1,2,3])); //[1, 2, 3]
console.log([].concat.apply([],[[1],[2],[3]]));//[1, 2, 3]
console.log([].concat([[1],[2],[3]]));//[[1], [2], [3]]
console.log([].concat.apply([],[[[1],[2],[3]]]));//[[1], [2], [3]]
console.log([].concat([[[1],[2],[3]]]));//[[[1], [2], [3]]]
console.log([].concat.apply([],[[[[1],[2],[3]]]]));//[[[1], [2], [3]]]

  上面代碼中,concat方法將最數(shù)組合并,然后在合并的基礎(chǔ)上在對下一層數(shù)組進行合并。

console.log([].concat.apply([],[[1],[2],[3]]));//[1, 2, 3]
//相當(dāng)于
console.log([].concat(1,2,3)); //[1,2,3] 

  總結(jié):

    1.單獨使用concat方法時,會將新數(shù)組的成員,添加到原數(shù)組的尾部。

    2.使用apply方法來指定concat方法的this指向時,會讓兩個方法的作用疊加。

    3.數(shù)組元素合并的方法:

var flatten = function (arr){
return [].concat.apply([],arr);
}; 
var flatten = function (array){
return array.reduce(function(a,b){
return a.concat(b);
},[])
}

以上所述是小編給大家介紹的javascript使用 concat 方法對數(shù)組進行合并的方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • javascript實現(xiàn)數(shù)字倒計時特效

    javascript實現(xiàn)數(shù)字倒計時特效

    這篇文章主要介紹了javascript實現(xiàn)網(wǎng)頁倒計時數(shù)字時鐘效果,是一款非常實用的javascript倒計時特效,具有一定參考借鑒價值,需要的朋友可以參考下
    2016-03-03
  • javascript 打字游戲?qū)崿F(xiàn)代碼

    javascript 打字游戲?qū)崿F(xiàn)代碼

    javascript 打字游戲?qū)崿F(xiàn)代碼,非常不錯的效果,功能還不是很完善,喜歡的朋友可以參考下。
    2010-04-04
  • typescript中type和interface的區(qū)別有哪些

    typescript中type和interface的區(qū)別有哪些

    大家使用typescript總會使用到interface和type,所以下面這篇文章主要給大家介紹了關(guān)于typescript中type和interface區(qū)別的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-02-02
  • JavaScript對象數(shù)組的排序處理方法

    JavaScript對象數(shù)組的排序處理方法

    這篇文章主要介紹了JavaScript對象數(shù)組的排序處理方法,以實例形式分析了JavaScript對象數(shù)組的排序原理與相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-10-10
  • 詳解JavaScript進度管理

    詳解JavaScript進度管理

    這篇文章主要介紹了JavaScript進度管理,對進度管理感興趣的同學(xué),可以參考下
    2021-04-04
  • 利用JS進行圖片的切換即特效展示圖片

    利用JS進行圖片的切換即特效展示圖片

    做網(wǎng)頁時需要利用JS進行特效展示圖片,下面是利用JS簡單制作的圖片的切換,需要的朋友可以了解下
    2013-12-12
  • 理解JavaScript變量作用域更輕松

    理解JavaScript變量作用域更輕松

    變量作用域是每門編程語言都會涉及的話題,也是作為一名程序員必需掌握的知識點,能深入掌握變量作用域更有助于你編寫穩(wěn)定的程序。
    2009-10-10
  • JavaScript如何實現(xiàn)對數(shù)字保留兩位小數(shù)一位自動補零

    JavaScript如何實現(xiàn)對數(shù)字保留兩位小數(shù)一位自動補零

    本文給大家介紹基于JavaScript如何實現(xiàn)對數(shù)字保留兩位小數(shù)一位自動補零的實例代碼,代碼簡單易懂,感興趣的朋友一起學(xué)習(xí)吧
    2015-12-12
  • JavaScript ES6 Module模塊詳解

    JavaScript ES6 Module模塊詳解

    這篇文章主要介紹了ES6新特性之模塊Module用法,簡要說明了模塊Module的概念、功能并結(jié)合實例形式分析了模塊Module的使用方法與相關(guān)注意事項,需要的朋友可以參考下
    2021-10-10
  • Bootstrap CSS布局之按鈕

    Bootstrap CSS布局之按鈕

    這篇文章主要介為大家詳細紹了Bootstrap CSS布局之按鈕的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12

最新評論