js 數(shù)組克隆方法 小結(jié)
更新時(shí)間:2010年03月20日 18:38:04 作者:
在JS中,對(duì)于對(duì)象類(lèi)型的變量的引用是通過(guò)類(lèi)似C之類(lèi)的“指針”的方式來(lái)操作的,及如果多個(gè)變量引用同一個(gè)對(duì)象,則任意一個(gè)變量對(duì)對(duì)象的操作都會(huì)影響到其它的變量。
因此如果要?jiǎng)?chuàng)建一個(gè)與已經(jīng)存在的對(duì)象內(nèi)容相同的對(duì)象,不能通過(guò)簡(jiǎn)單的賦值操作。這樣說(shuō)的可能還是不太明白。
看下面的例子:
var a=[1,2,3,4]; var b=a;c=b; a.pop(); //移除最后一個(gè)元素 alert(b); //彈出1,2,3 alert(c); //彈出1,2,3
var a=[1,2,3,4]; var b=a;c=b; a.pop(); //移除最后一個(gè)元素 alert(b); //彈出1,2,3 alert(c); //彈出1,2,3
我們執(zhí)行上面的代碼發(fā)現(xiàn),在a的內(nèi)容做改變后,變量b和c的結(jié)果也改變了。
上面的情況也許不是我們所需要的,我們希望的是創(chuàng)建一個(gè)與原對(duì)象內(nèi)容一樣的“新”對(duì)象。這樣我們就需要通過(guò)一些克隆的辦法來(lái)實(shí)現(xiàn)。
JS里Array也是一種Object。這里我們主要總結(jié)一下Array的克隆方式,我們這里為Array原生對(duì)象擴(kuò)展一個(gè)clone方法。
1、最簡(jiǎn)單的辦法,就是創(chuàng)建一個(gè)新數(shù)組,并遍歷數(shù)組逐項(xiàng)添加到新數(shù)組中。
Array.prototype.clone=function(){ var a=[]; for(var i=0,l=this.length;i<l;i++) a.push(this[i]); return a; }
Array.prototype.clone=function(){ var a=[]; for(var i=0,l=this.length;i<l;i++) a.push(this[i]); return a; }
這種實(shí)現(xiàn)方式是最容易想到也是最容易理解的,但是代碼有點(diǎn)復(fù)雜了,我們仔細(xì)研究Array的一些方法,其實(shí)還有一個(gè)很簡(jiǎn)單的辦法。下面說(shuō)一下其它的兩種辦法。
2、通過(guò)Array對(duì)象的slice方法。
slice方法是通過(guò)參數(shù)start和end的傳入值來(lái)返回?cái)?shù)組中的一段,該方法不對(duì)原數(shù)組進(jìn)行操作。我們通過(guò)slice(0)可以使其返回所有項(xiàng)。
Array.prototype.clone=function(){ return this.slice(0); }
Array.prototype.clone=function(){ return this.slice(0); }
3、通過(guò)Array對(duì)象的concat方法。
concat方法是用來(lái)實(shí)現(xiàn)數(shù)組的合并的。通過(guò)和一個(gè)空函數(shù)的合并,即可實(shí)現(xiàn)我們的克隆功能。
Array.prototype.clone=function(){ return [].concat(this); } //或者 Array.prototype.clone=function(){ return this.concat(); }
Array.prototype.clone=function(){ return [].concat(this); } //或者 Array.prototype.clone=function(){ return this.concat(); }
如果發(fā)揮想象應(yīng)該還有其它的辦法,以上只是本人想到的兩種方法。
JavaScript 克隆數(shù)組最簡(jiǎn)單的方法
JavaScript數(shù)組的快速克隆(slice()函數(shù))和數(shù)組的排序、亂序和搜索(sort()函數(shù))
看下面的例子:
復(fù)制代碼 代碼如下:
var a=[1,2,3,4]; var b=a;c=b; a.pop(); //移除最后一個(gè)元素 alert(b); //彈出1,2,3 alert(c); //彈出1,2,3
var a=[1,2,3,4]; var b=a;c=b; a.pop(); //移除最后一個(gè)元素 alert(b); //彈出1,2,3 alert(c); //彈出1,2,3
我們執(zhí)行上面的代碼發(fā)現(xiàn),在a的內(nèi)容做改變后,變量b和c的結(jié)果也改變了。
上面的情況也許不是我們所需要的,我們希望的是創(chuàng)建一個(gè)與原對(duì)象內(nèi)容一樣的“新”對(duì)象。這樣我們就需要通過(guò)一些克隆的辦法來(lái)實(shí)現(xiàn)。
JS里Array也是一種Object。這里我們主要總結(jié)一下Array的克隆方式,我們這里為Array原生對(duì)象擴(kuò)展一個(gè)clone方法。
1、最簡(jiǎn)單的辦法,就是創(chuàng)建一個(gè)新數(shù)組,并遍歷數(shù)組逐項(xiàng)添加到新數(shù)組中。
復(fù)制代碼 代碼如下:
Array.prototype.clone=function(){ var a=[]; for(var i=0,l=this.length;i<l;i++) a.push(this[i]); return a; }
Array.prototype.clone=function(){ var a=[]; for(var i=0,l=this.length;i<l;i++) a.push(this[i]); return a; }
這種實(shí)現(xiàn)方式是最容易想到也是最容易理解的,但是代碼有點(diǎn)復(fù)雜了,我們仔細(xì)研究Array的一些方法,其實(shí)還有一個(gè)很簡(jiǎn)單的辦法。下面說(shuō)一下其它的兩種辦法。
2、通過(guò)Array對(duì)象的slice方法。
slice方法是通過(guò)參數(shù)start和end的傳入值來(lái)返回?cái)?shù)組中的一段,該方法不對(duì)原數(shù)組進(jìn)行操作。我們通過(guò)slice(0)可以使其返回所有項(xiàng)。
復(fù)制代碼 代碼如下:
Array.prototype.clone=function(){ return this.slice(0); }
Array.prototype.clone=function(){ return this.slice(0); }
3、通過(guò)Array對(duì)象的concat方法。
concat方法是用來(lái)實(shí)現(xiàn)數(shù)組的合并的。通過(guò)和一個(gè)空函數(shù)的合并,即可實(shí)現(xiàn)我們的克隆功能。
復(fù)制代碼 代碼如下:
Array.prototype.clone=function(){ return [].concat(this); } //或者 Array.prototype.clone=function(){ return this.concat(); }
Array.prototype.clone=function(){ return [].concat(this); } //或者 Array.prototype.clone=function(){ return this.concat(); }
如果發(fā)揮想象應(yīng)該還有其它的辦法,以上只是本人想到的兩種方法。
JavaScript 克隆數(shù)組最簡(jiǎn)單的方法
JavaScript數(shù)組的快速克隆(slice()函數(shù))和數(shù)組的排序、亂序和搜索(sort()函數(shù))
您可能感興趣的文章:
- JS對(duì)象的深度克隆方法示例
- JS對(duì)象深度克隆實(shí)例分析
- JS擴(kuò)展類(lèi),克隆對(duì)象與混合類(lèi)實(shí)例分析
- JavaScript 深層克隆對(duì)象詳解及實(shí)例
- JavaScript 用cloneNode方法克隆節(jié)點(diǎn)的代碼
- javascript dom操作之cloneNode文本節(jié)點(diǎn)克隆使用技巧
- JavaScript 克隆數(shù)組最簡(jiǎn)單的方法
- JavaScript數(shù)組的快速克隆(slice()函數(shù))和數(shù)組的排序、亂序和搜索(sort()函數(shù))
- javascript淺層克隆、深度克隆對(duì)比及實(shí)例解析
相關(guān)文章
javascript特效實(shí)現(xiàn)——當(dāng)前時(shí)間和倒計(jì)時(shí)效果的簡(jiǎn)單實(shí)例
下面小編就為大家?guī)?lái)一篇javascript特效實(shí)現(xiàn)——當(dāng)前時(shí)間和倒計(jì)時(shí)效果的簡(jiǎn)單實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-07-07
原生js結(jié)合html5制作簡(jiǎn)易的雙色子游戲
這篇文章主要介紹了原生js結(jié)合html5制作簡(jiǎn)易的雙色子游戲的代碼,是個(gè)人學(xué)習(xí)練手用的,雖然寫(xiě)的不太好,還是分享給大家,有需要的小伙伴可以參考下。2015-03-03
關(guān)于Blog頂部的滾動(dòng)導(dǎo)航條代碼
關(guān)于Blog頂部的滾動(dòng)導(dǎo)航條代碼...2006-09-09
外部web端訪問(wèn)微信小程序云數(shù)據(jù)庫(kù)的三種方法總結(jié)
最近在研究微信小程序的云開(kāi)發(fā)功能,下面這篇文章主要給大家介紹了關(guān)于外部web端訪問(wèn)微信小程序云數(shù)據(jù)庫(kù)的三種方法,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-04-04
BootStrap智能表單實(shí)戰(zhàn)系列(九)表單圖片上傳的支持
這篇文章主要介紹了BootStrap智能表單實(shí)戰(zhàn)系列(九)表單圖片上傳的支持,介紹如何在生成表單后,可以支持上傳圖片后可以及時(shí)預(yù)覽圖片的功能,需要的朋友可以參考下2016-06-06
Javascript 八進(jìn)制轉(zhuǎn)義字符(8進(jìn)制)
最近在看一些Javascript玩魔術(shù)的資料,感嘆那些真正的是在玩技術(shù),相當(dāng)讓人佩服。2011-04-04
無(wú)阻塞加載js,防止因js加載不了影響頁(yè)面顯示的問(wèn)題
下面小編就為大家?guī)?lái)一篇無(wú)阻塞加載js,防止因js加載不了影響頁(yè)面顯示的問(wèn)題。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)2016-12-12

