欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

深入理解javascript中concat方法

 更新時間:2016年12月12日 15:21:16   作者:unclekeith  
本文主要介紹了javascript中concat方法,主要分為2小節(jié)內(nèi)容:1.concat方法的基礎(chǔ)介紹;2.從實例中感受concat方法。需要的朋友一起來看下吧

最近在惡補(bǔ)js知識的時候,總是會因為js強(qiáng)大的語法而感到震撼。因為以前對前端方面的疏忽,導(dǎo)致了一些理解的錯誤。因此痛改前非,下定決心,不管做什么事情,都要有專研的精神。

在介紹前,拋出一個問題:如何將多個數(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ù)組的末尾。

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ù)組逐漸變化的。

Javascript中call,apply,bind方法的詳解與總結(jié) 文章中,有提到 apply方法的作用與call方法類似,也是改變某個函數(shù)中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([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ù)組中。下半段中,調(diào)用了String對象的實例方法apply,將concat()函數(shù)內(nèi)部的this指向了[],并且在[]作用域下,傳入調(diào)用concat需要的參數(shù),并且以數(shù)組的方式傳入。再看幾個例子。

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

總結(jié):

1.單獨(dú)使用concat方法時,會將新數(shù)組的成員,添加到原數(shù)組的尾部,然后返回一個新數(shù)組,原數(shù)組不變;如果傳入的其他類型的值,它們會作為新的元素,添加到數(shù)組末尾。

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

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

如果對不理解apply方法,可以前往這篇文章:Javascript中call,apply,bind方法的詳解與總結(jié)

以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!

相關(guān)文章

  • JavaScript高級程序設(shè)計 擴(kuò)展--關(guān)于動態(tài)原型

    JavaScript高級程序設(shè)計 擴(kuò)展--關(guān)于動態(tài)原型

    前文是基于《JavaScript高級程序設(shè)計》中關(guān)于對象創(chuàng)建的筆記和總結(jié)。
    2010-11-11
  • JavaScript中setInterval的用法總結(jié)

    JavaScript中setInterval的用法總結(jié)

    這篇文章主要是對JavaScript中setInterval的用法進(jìn)行了詳細(xì)的總結(jié)介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2013-11-11
  • JS實戰(zhàn)例子之實現(xiàn)自動打字機(jī)動效

    JS實戰(zhàn)例子之實現(xiàn)自動打字機(jī)動效

    什么是打字機(jī)效果呢?打字機(jī)效果即為文字逐個輸出,實際上就是一種Web動畫,下面這篇文章主要給大家介紹了關(guān)于JS實戰(zhàn)例子之實現(xiàn)自動打字機(jī)動效的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • 硬盤瀏覽程序,保存成網(wǎng)頁格式便可使用

    硬盤瀏覽程序,保存成網(wǎng)頁格式便可使用

    硬盤瀏覽程序,保存成網(wǎng)頁格式便可使用...
    2006-12-12
  • 2020京東618疊蛋糕js腳本(親測好用)

    2020京東618疊蛋糕js腳本(親測好用)

    這篇文章主要介紹了京東618疊蛋糕js腳本,基于auto.js 打開,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • js鏈表操作(實例講解)

    js鏈表操作(實例講解)

    下面小編就為大家?guī)硪黄猨s鏈表操作(實例講解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • JavaScript?編寫枚舉的最有效方法分享

    JavaScript?編寫枚舉的最有效方法分享

    這篇文章主要介紹了JavaScript?編寫枚舉的最有效方法分享,JavaScript語言本身不支持枚舉。如果我們想模擬枚舉,我們可以使用一個對象。更多相關(guān)內(nèi)容感興趣的小伙伴可以參考一下
    2022-06-06
  • 使用js實現(xiàn)一個簡單的滾動條過程解析

    使用js實現(xiàn)一個簡單的滾動條過程解析

    這篇文章主要介紹了使用js實現(xiàn)一個簡單的滾動條過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09
  • JavaScrip實現(xiàn)一個有時間限制的緩存類的方式

    JavaScrip實現(xiàn)一個有時間限制的緩存類的方式

    本文將探索 JavaScript 中一種基于自動過期機(jī)制的時間限制緩存實現(xiàn)方式,提高數(shù)據(jù)緩存策略的靈活性和效率,文中通過代碼示例給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-01-01
  • js隱式轉(zhuǎn)換的知識實例講解

    js隱式轉(zhuǎn)換的知識實例講解

    在本篇文章中,小編給大家分享了關(guān)于js隱式轉(zhuǎn)換的相關(guān)知識點(diǎn)內(nèi)容,有興趣的朋友們參考學(xué)習(xí)下。
    2018-09-09

最新評論