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

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

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

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

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

1.concat方法的基礎介紹

2.從實例中感受concat方法

1.concat方法的基礎介紹

  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]; 

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

2.從實例中感受concat方法

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

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

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

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

  這一段簡單的函數(shù)就可以實現(xiàn)將數(shù)組中的元素合并的功能。但是當我在理解這個返回值的時候,出現(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ù)組。

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

  首先,我們在空數(shù)組中調用實例方法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方法的詳解與總結 文章中,有提到 apply方法的作用與call方法類似,也是改變this指向(函數(shù)執(zhí)行時所在的作用域),然后在指定的作用域中,調用該函數(shù)。同時也會立即執(zhí)行該函數(shù)。唯一的區(qū)別就是,它接收一個數(shù)組作為函數(shù)執(zhí)行時的參數(shù)。

  apply方法的第一個參數(shù)也是this所要指向的那個對象,如果設為null或undefined或者this,則等同于指定全局對象。第二個參數(shù)則是一個數(shù)組,該數(shù)組的所有成員依次作為參數(shù),在調用時傳入原函數(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ù)組上先調用了concat方法,該方法的作用是將新數(shù)組的成員,添加到原數(shù)組的尾部。再調用了apply方法,傳入第一個參數(shù),指定對象執(zhí)行時所在的作用域,而第二個參數(shù)的作用是將數(shù)組中的所有成員一次作為參數(shù),在調用時傳入數(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ù)組合并,然后在合并的基礎上在對下一層數(shù)組進行合并。

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

  總結:

    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ù)組進行合并的方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!

相關文章

  • JS設置下拉列表框當前所選值的方法

    JS設置下拉列表框當前所選值的方法

    這篇文章主要介紹了JS設置下拉列表框當前所選值的方法,涉及JavaScript結合jsp動態(tài)設置select下拉列表框的相關技巧,需要的朋友可以參考下
    2015-12-12
  • 利用JS響應式修改vue實現(xiàn)頁面的input值

    利用JS響應式修改vue實現(xiàn)頁面的input值

    這篇文章主要給大家介紹了關于如何利用JS響應式修改vue實現(xiàn)頁面的input值,文中通過示例代碼介紹的非常詳細,對大家學習或者使用JS具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-09-09
  • 操作按鈕懸浮固定在微信小程序底部的實現(xiàn)代碼

    操作按鈕懸浮固定在微信小程序底部的實現(xiàn)代碼

    在一些購物平臺經常需要將商品加入購物車,像加入購物車按鈕、結算按鈕、收貨列表添加地址按鈕都是按鈕懸浮底部的,怎么實現(xiàn)這樣的功能呢?下面小編給大家?guī)砹瞬僮靼粹o懸浮固定在微信小程序底部的實現(xiàn)代碼,一起看看吧
    2019-08-08
  • svg插入foreignObject無法響應事件解決

    svg插入foreignObject無法響應事件解決

    這篇文章主要為大家介紹了svg插入foreignObject無法響應事件解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10
  • Javascript 調試利器 Firebug使用詳解六

    Javascript 調試利器 Firebug使用詳解六

    有時候,為了更清楚方便的查看輸出信息,我們可能需要將一些調試信息進行分組輸出,那么可以使用console.group來對信息進行分組,在組信息輸出完成后用console.groupEnd結束分組。
    2009-07-07
  • Javascript 變量作用域 兩個可能會被忽略的小特性

    Javascript 變量作用域 兩個可能會被忽略的小特性

    關于Javascript,大家肯定都很熟悉啦,對于有編程經驗的朋友來說,Javascript很快就能上手,不過關于JS的變量作用域,還是有一點差別的。
    2010-03-03
  • JS數(shù)據類型判斷的9種方式總結

    JS數(shù)據類型判斷的9種方式總結

    談到JS的類型判斷大家應該都不陌生,下面這篇文章主要給大家介紹了關于JS數(shù)據類型判斷的9種方式,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-12-12
  • layui 實現(xiàn)自動選擇radio單選框(checked)的方法

    layui 實現(xiàn)自動選擇radio單選框(checked)的方法

    今天小編就為大家分享一篇layui 實現(xiàn)自動選擇radio單選框(checked)的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • JS對象添加屬性和方法的多種方式

    JS對象添加屬性和方法的多種方式

    本文介紹了如何使用JavaScript對象添加屬性和方法,通過實例演示了如何給對象添加屬性,以及如何在對象中定義方法,具有一定的參考價值,感興趣的可以了解一下
    2023-08-08
  • JavaScript和JQuery的鼠標mouse事件冒泡處理

    JavaScript和JQuery的鼠標mouse事件冒泡處理

    這篇文章主要介紹了JavaScript和JQuery的鼠標mouse事件冒泡處理,本文總結出了mouse事件的一些定論,并分別給出了JavaScript和JQuery測試代碼,需要的朋友可以參考下
    2015-06-06

最新評論

乌恰县| 监利县| 朝阳区| 永靖县| 郓城县| 岗巴县| 射阳县| 芜湖市| 兴山县| 阳春市| 和田县| 冕宁县| 张掖市| 澄迈县| 宁乡县| 平阳县| 利辛县| 湖北省| 淮南市| 杂多县| 弥渡县| 湛江市| 青浦区| 昌黎县| 榕江县| 明溪县| 三明市| 北碚区| 西乌珠穆沁旗| 永平县| 新密市| 香河县| 渝中区| 婺源县| 兴安盟| 布拖县| 宁德市| 南川市| 新和县| 当涂县| 江陵县|