JavaScript模擬數(shù)組合并concat
定義和用法
concat() 方法用于連接兩個(gè)或多個(gè)數(shù)組。
該方法不會(huì)改變現(xiàn)有的數(shù)組,而僅僅會(huì)返回被連接數(shù)組的一個(gè)副本。
語(yǔ)法
arrayObject.concat(arrayX,arrayX,......,arrayX)
參數(shù) | 描述 |
---|---|
arrayX | 必需。該參數(shù)可以是具體的值,也可以是數(shù)組對(duì)象??梢允侨我舛鄠€(gè)。 |
返回一個(gè)新的數(shù)組。該數(shù)組是通過(guò)把所有 arrayX 參數(shù)添加到 arrayObject 中生成的。如果要進(jìn)行 concat() 操作的參數(shù)是數(shù)組,那么添加的是數(shù)組中的元素,而不是數(shù)組
。
我們有兩個(gè)這樣的數(shù)組
var arr1 = [1,2,3]; var arr2 = [4,5,6];
任務(wù):合并成這樣,請(qǐng)至少提供兩種思路。
var arr1 = [1,2,3,4,5,6];
思路一:我們可以把第二個(gè)數(shù)組里面的值挨個(gè)添加到第一個(gè)數(shù)組的末尾。
1:數(shù)組怎么添加內(nèi)容 ?[] || push || shift
2:怎么向數(shù)組最后一個(gè)索引添加值? push || [數(shù)組.length]
3:怎么挨個(gè)向數(shù)組一添加內(nèi)容? for
4: for循環(huán)多少次? 你要添加多少就循環(huán)多少次,也就是arr2的長(zhǎng)度
5: 要添加什么內(nèi)容?arr2里面的值,怎么獲取,arr[?]
代碼實(shí)現(xiàn):
var arr1 = [1,2,3]; var arr2 = [4,5,6]; for(var i=0;i<arr2.length;i++){ arr1.push(arr2[i]); } console.log(arr1); //[1, 2, 3, 4, 5, 6]
問(wèn)題來(lái)了,原生js提供的concat方法不會(huì)修改原數(shù)組(arr1)的內(nèi)容,而是返回一個(gè)新數(shù)組。
分析:既然是要返回值,那我們可以定義一個(gè)函數(shù),然后再定義一個(gè)變量,這個(gè)變量來(lái)接收我們添加好的值,但是我們會(huì)一個(gè)問(wèn)題,那就是不能在arr1上面push內(nèi)容了,不然還是會(huì)修改原數(shù)組的內(nèi)容。于是我覺(jué)得要把原數(shù)組復(fù)制一份,但是又有一個(gè)問(wèn)題,就是對(duì)象是引用類型,簡(jiǎn)單來(lái)說(shuō)雖然我們可以把數(shù)組1復(fù)制到一個(gè)變量中,但是如果我用push或者[]的形式修改里面的值,或者添加,那么我們的原數(shù)組也會(huì)被修改,(如果你不知道什么是引用類型,可以去看我博客的第一頁(yè)或者在第二頁(yè))這不是我們想要的結(jié)果,但是我們必須復(fù)制一份arr1。此時(shí)你有什么解決方法?
解決數(shù)組引用問(wèn)題:
for(var i=0;i<arr1.length;i++){ arr3[i] = arr1[i]; }
我的思路是把數(shù)組1的值挨個(gè)的添加到arr3這個(gè)數(shù)組中,此時(shí)的arr3是這樣的
console.log(arr3) //[1, 2, 3]
任務(wù):在這個(gè)新的數(shù)組arr3中添加arr2的所以值,方法和第一步一樣,如果忘記了回頭看看。
代碼實(shí)現(xiàn):
var arr1 = [1,2,3]; var arr2 = [4,5,6]; var arr3 = []; for(var i=0;i<arr1.length;i++){ arr3[i] = arr1[i]; } for(var i=0;i<arr2.length;i++){ arr3.push(arr2[i]); } console.log(arr3);
問(wèn)題:雖然這個(gè)已經(jīng)實(shí)現(xiàn)了數(shù)組的合并,但是我每次合并都要重新寫(xiě)一份,那樣太麻煩,于是我們得想個(gè)辦法把它封裝成一個(gè)函數(shù),下次我們要用的時(shí)候調(diào)用它就行。
var arr1 = [1,2,3]; var arr2 = [4,5,6,7]; function Concat(arr1,arr2){ var arr3 = []; for(var i=0;i<arr1.length;i++){ arr3[i] = arr1[i]; } for(var i=0;i<arr2.length;i++){ arr3.push(arr2[i]); } return arr3; } console.log(Concat(arr1,arr2));
思路二:
分析:把a(bǔ)rr1和arr2都轉(zhuǎn)換成字符串,然后將這兩段字符串相加得到一個(gè)組合,然后再把這個(gè)字符串轉(zhuǎn)成數(shù)組。
代碼實(shí)現(xiàn):
var arr1 = [1,2,3]; var arr2 = [4,5,6,7,8,9]; var arr3 = (arr1.join(",")+","+arr2.join(",")).split(",");
出了點(diǎn)小問(wèn)題,這個(gè)這個(gè)數(shù)組里面的值是字符串了。
["1", "2", "3", "4", "5", "6", "7", "8", "9"]
解決思路:遍歷這個(gè)數(shù)組,挨個(gè)把他們轉(zhuǎn)換成數(shù)字。
var arr1 = [1,2,3]; var arr2 = [4,5,6,7,8,9]; var arr3 = (arr1.join(",")+","+arr2.join(",")).split(","); for(var i=0;i<arr3.length;i++){ arr3[i] = +arr3[i]; } console.log(arr3);
課外擴(kuò)展:繼承版
var arr1 = [1,2,3]; var arr2 = [4,5,6,7,8,9]; Array.prototype.Concat = function(arr){ var arr3 = []; for(var i=0;i<this.length;i++){ arr3[i] = this[i]; } for(var i=0;i<arr.length;i++){ arr3.push(arr[i]); } return arr3; } console.log(arr1.Concat(arr2));
以上所述是小編給大家介紹的JavaScript模擬數(shù)組合并concat的相關(guān)知識(shí),希望對(duì)大家有所幫助!
- JS數(shù)組合并push與concat區(qū)別分析
- js嵌套的數(shù)組扁平化:將多維數(shù)組變成一維數(shù)組以及push()與concat()區(qū)別的講解
- JavaScript使用concat連接數(shù)組的方法
- JavaScript字符串對(duì)象的concat方法實(shí)例(用于連接兩個(gè)或多個(gè)字符串)
- JS數(shù)組方法concat()用法實(shí)例分析
- JavaScript中使用concat()方法拼接字符串的教程
- 深入理解javascript中concat方法
- javascript使用 concat 方法對(duì)數(shù)組進(jìn)行合并的方法
- Javascript連接多個(gè)數(shù)組不用concat來(lái)解決
- js采用concat和sort將N個(gè)數(shù)組拼接起來(lái)的方法
- javascript中數(shù)組的concat()方法使用介紹
- javascript concat數(shù)組累加 示例
- JS Array創(chuàng)建及concat()split()slice()的使用方法
- 淺談JavaScript的push(),pop(),concat()方法
- JS數(shù)組降維的實(shí)現(xiàn)Array.prototype.concat.apply([], arr)
- JavaScript中concat復(fù)制數(shù)組方法淺析
- javascript數(shù)組中的concat方法和splice方法
- JavaScript的concat方法實(shí)例代碼(數(shù)組連接)
相關(guān)文章
分享兩個(gè)手機(jī)訪問(wèn)pc網(wǎng)站自動(dòng)跳轉(zhuǎn)手機(jī)端網(wǎng)站代碼
這篇文章主要介紹了分享兩個(gè)手機(jī)訪問(wèn)pc網(wǎng)站自動(dòng)跳轉(zhuǎn)手機(jī)端網(wǎng)站代碼,需要的朋友可以參考下2015-01-01js判斷運(yùn)行jsp頁(yè)面的瀏覽器類型以及版本示例
做了一個(gè)判斷瀏覽器類型和版本號(hào)的業(yè)務(wù),記錄下相關(guān)的js代碼,個(gè)人感覺(jué)還不錯(cuò),需要的朋友可以參考下2013-10-10使用JavaScript判斷圖片是否加載完成的三種實(shí)現(xiàn)方式
有時(shí)需要獲取圖片的尺寸,這需要在圖片加載完成以后才可以,本文有三個(gè)不錯(cuò)的實(shí)現(xiàn)方式在此與大家分享下2014-05-05教你如何在 Javascript 文件里使用 .Net MVC Razor 語(yǔ)法
文章主要是介紹了通過(guò)一個(gè)第三方類庫(kù)RazorJS,實(shí)現(xiàn)Javascript 文件里使用 .Net MVC Razor 語(yǔ)法,很巧妙,推薦給大家2014-07-07JavaScript實(shí)現(xiàn)cookie的寫(xiě)入、讀取、刪除功能
cookie 是存在有效期的,在默認(rèn)情況下,一個(gè) cookie 的生命周期就是在瀏覽器關(guān)閉的時(shí)候結(jié)束,本文給大家介紹關(guān)于javascript對(duì)于cookie的簡(jiǎn)單操作,比如對(duì)于cookie的寫(xiě)入和刪除,代碼簡(jiǎn)單易懂,需要的朋友參考下2015-11-11基于JavaScript實(shí)現(xiàn)省市聯(lián)動(dòng)效果
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)省市聯(lián)動(dòng)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-06-06JavaScript實(shí)現(xiàn)更改網(wǎng)頁(yè)背景與字體顏色的方法
這篇文章主要介紹了JavaScript實(shí)現(xiàn)更改網(wǎng)頁(yè)背景與字體顏色的方法,可實(shí)現(xiàn)點(diǎn)擊按鈕改變網(wǎng)頁(yè)背景色的功能,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-02-02