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

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

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

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

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

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

2.從實(shí)例中感受concat方法

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

  concat方法用于多個(gè)數(shù)組的合并。它將新數(shù)組的成員,添加到原數(shù)組的尾部,然后返回一個(gè)新數(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]]

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

  除了接受數(shù)組作為參數(shù),concat也可以接受其他類型的值作為參數(shù)。它們會(huì)作為新的元素,添加數(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)容較少,看起來(lái)挺簡(jiǎn)單。但是真正理解起來(lái)真的不容易。

2.從實(shí)例中感受concat方法

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

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

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

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

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

  問(wèn)題:為什么使用apply方法和沒(méi)有使用apply方法會(huì)有區(qū)別?

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

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

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

  首先,我們?cè)诳諗?shù)組中調(diào)用實(shí)例方法concat的時(shí)候,是傳入concat中的參數(shù),在push到數(shù)組的末尾。也就是說(shuō),會(huì)將空數(shù)組與傳入的數(shù)組的最外層數(shù)組進(jìn)行合并,然后返回一個(gè)新數(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]]]

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

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

  apply方法的第一個(gè)參數(shù)也是this所要指向的那個(gè)對(duì)象,如果設(shè)為null或undefined或者this,則等同于指定全局對(duì)象。第二個(gè)參數(shù)則是一個(gè)數(shù)組,該數(shù)組的所有成員依次作為參數(shù),在調(diào)用時(shí)傳入原函數(shù)。原函數(shù)的參數(shù),在call方法中必須一個(gè)個(gè)添加,但是在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方法,傳入第一個(gè)參數(shù),指定對(duì)象執(zhí)行時(shí)所在的作用域,而第二個(gè)參數(shù)的作用是將數(shù)組中的所有成員一次作為參數(shù),在調(diào)用時(shí)傳入數(shù)組中。

  因此,在concat,apply方法同時(shí)使用的時(shí)候,兩個(gè)方法的作用會(huì)疊加,也就出現(xiàn)了與單獨(dú)使用concat不同的現(xiàn)象。看個(gè)例子。

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ǔ)上在對(duì)下一層數(shù)組進(jìn)行合并。

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

  總結(jié):

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

    2.使用apply方法來(lái)指定concat方法的this指向時(shí),會(huì)讓兩個(gè)方法的作用疊加。

    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 方法對(duì)數(shù)組進(jìn)行合并的方法,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • JS設(shè)置下拉列表框當(dāng)前所選值的方法

    JS設(shè)置下拉列表框當(dāng)前所選值的方法

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

    利用JS響應(yīng)式修改vue實(shí)現(xiàn)頁(yè)面的input值

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

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

    在一些購(gòu)物平臺(tái)經(jīng)常需要將商品加入購(gòu)物車,像加入購(gòu)物車按鈕、結(jié)算按鈕、收貨列表添加地址按鈕都是按鈕懸浮底部的,怎么實(shí)現(xiàn)這樣的功能呢?下面小編給大家?guī)?lái)了操作按鈕懸浮固定在微信小程序底部的實(shí)現(xiàn)代碼,一起看看吧
    2019-08-08
  • svg插入foreignObject無(wú)法響應(yīng)事件解決

    svg插入foreignObject無(wú)法響應(yīng)事件解決

    這篇文章主要為大家介紹了svg插入foreignObject無(wú)法響應(yīng)事件解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • Javascript 調(diào)試?yán)?Firebug使用詳解六

    Javascript 調(diào)試?yán)?Firebug使用詳解六

    有時(shí)候,為了更清楚方便的查看輸出信息,我們可能需要將一些調(diào)試信息進(jìn)行分組輸出,那么可以使用console.group來(lái)對(duì)信息進(jìn)行分組,在組信息輸出完成后用console.groupEnd結(jié)束分組。
    2009-07-07
  • Javascript 變量作用域 兩個(gè)可能會(huì)被忽略的小特性

    Javascript 變量作用域 兩個(gè)可能會(huì)被忽略的小特性

    關(guān)于Javascript,大家肯定都很熟悉啦,對(duì)于有編程經(jīng)驗(yàn)的朋友來(lái)說(shuō),Javascript很快就能上手,不過(guò)關(guān)于JS的變量作用域,還是有一點(diǎn)差別的。
    2010-03-03
  • JS數(shù)據(jù)類型判斷的9種方式總結(jié)

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

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

    layui 實(shí)現(xiàn)自動(dòng)選擇radio單選框(checked)的方法

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

    JS對(duì)象添加屬性和方法的多種方式

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

    JavaScript和JQuery的鼠標(biāo)mouse事件冒泡處理

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

最新評(píng)論

潮州市| 安新县| 湟源县| 朔州市| 成武县| 郯城县| 湖州市| 阜阳市| 什邡市| 惠水县| 贡嘎县| 荥经县| 北流市| 从化市| 哈尔滨市| 乌兰察布市| 广元市| 金门县| 余姚市| 鹤岗市| 新巴尔虎左旗| 莱芜市| 凤台县| 阜宁县| 大兴区| 上蔡县| 商南县| 东阿县| 若羌县| 咸宁市| 舟曲县| 黄梅县| 定日县| 中阳县| 潮州市| 略阳县| 庐江县| 湖南省| 巧家县| 肇源县| 吉水县|