javascript中為操作數(shù)組中的項(xiàng)提供了很多方法。如:push、pop、shift、unshift等。concat()方法能夠基于當(dāng)前的數(shù)組中的所有項(xiàng),創(chuàng)建一個(gè)新的數(shù)組。
concat()方法
concat()方法創(chuàng)建當(dāng)前數(shù)組的一個(gè)備份,然后接收參數(shù)添加到這個(gè)副本的末尾,并返回新的數(shù)組。concat在沒有參數(shù)的時(shí)候,只是復(fù)制當(dāng)前的數(shù)組,并返回副本。如果傳遞的參數(shù)是一個(gè)或多個(gè)數(shù)組,concat方法會(huì)將參數(shù)中的數(shù)組每一項(xiàng)都添加到結(jié)果數(shù)組中。
var colors=['red','green','blue'];
var colors2=colors.concat('yellow',['aaa','bbb']);
alert(colors2);//red,green,blue,yellow,aaa,bbb
如果添加的對(duì)象數(shù)組呢?
var obgArray=colors.concat('yellow',{"name":'leee',"sex":"man"})
console.log(obgArray);//["red", "green", "blue", "yellow", Object]
他的表現(xiàn)就和push一樣了。
concat() vs. push()
我們知道push是在原數(shù)組上添加項(xiàng),cancat是復(fù)制新的數(shù)組副本添加項(xiàng)。當(dāng)兩天添加的項(xiàng)為數(shù)組時(shí)有什么樣的表現(xiàn)呢。
var colors=['red','green','blue'];
var colors2=colors.concat('yellow',['aaa','bbb']);
console.log(colors2);//red,green,blue,yellow,aaa,bbb
colors.push('yellow',['aaa','bbb'])//["red", "green", "blue", "yellow", Array[2]]
console.log(colors);
push方法是添加的數(shù)組以數(shù)組項(xiàng)的方式添加到數(shù)組,返回?cái)?shù)組的長度,而concat是每一項(xiàng)都添加,返回新的數(shù)組。這是兩者的差別,一個(gè)返回?cái)?shù)組長度,一個(gè)返回操作后的新數(shù)組。
slice()方法
slice方法能夠基于當(dāng)前的一個(gè)或個(gè)項(xiàng)創(chuàng)建一個(gè)新的數(shù)組。slice接受一個(gè)或兩個(gè)參數(shù),即返回項(xiàng)的起始位置和結(jié)束位置。當(dāng)只有一個(gè)參數(shù)的時(shí)候,返回從該項(xiàng)到當(dāng)前數(shù)組末尾的所有項(xiàng)。當(dāng)有兩個(gè)參數(shù)的時(shí)候返回起始項(xiàng)和結(jié)束項(xiàng)中間的項(xiàng)--但不包括結(jié)束位置的項(xiàng)。
var a=['a','b','c','d','e'];
var b=a.slice(1);//b,c,d,e
var c=a.slice(1,4)//b.c.d
如果slice中的參數(shù)為負(fù)數(shù),則用數(shù)組的長度加上改參數(shù)來確定相應(yīng)的位置。
var d=['a','b','c','d','e'];
var e=d.slice(-2,-1);//d
splice()方法
splice可進(jìn)行刪除、插入、替換,是非常強(qiáng)大的數(shù)組方法。
<b>刪除</b>--可以刪除任意數(shù)量的項(xiàng),只需要指定2個(gè)參數(shù),要?jiǎng)h除項(xiàng)的起始位置和項(xiàng)數(shù),如splice(0,2)刪除數(shù)組中的前兩項(xiàng)。
<b>插入</b>--可以指定位置插入任意的項(xiàng),只需提供三個(gè)參數(shù):起始位置,0(要?jiǎng)h除的項(xiàng)數(shù)),和要插入的項(xiàng)。如果要插入多個(gè)項(xiàng),可以再傳入更多的參數(shù)。如:splice(1,0,"A","B");
<b>替換</b>--可以向指定位置插入熱議數(shù)量的項(xiàng),同時(shí)刪除任意數(shù)量的項(xiàng)。只需指定三個(gè)參數(shù),起始位置,要?jiǎng)h除的項(xiàng)數(shù),和要插入的任意數(shù)量的項(xiàng)。插入的項(xiàng)數(shù)不必和刪除的項(xiàng)數(shù)相等。如:splice(2,1,"a","b");
var A=['A','B','C','D'];
var B=A.splice(1,1);//B
console.log(A);//A,C,D
insert=A.splice(0,0,'a','b');//空值
console.log(A);//a,b,A,C,D
結(jié):
concat方法復(fù)制數(shù)組副本添加數(shù)組的項(xiàng),不管添加的項(xiàng)是否為數(shù)組,都講打散逐項(xiàng)的添加。
slice方法基于當(dāng)前的數(shù)組的一項(xiàng)或多項(xiàng)放回新的數(shù)組。接受一個(gè)或兩個(gè)參數(shù),起始位置和結(jié)束位置的項(xiàng)。沒有結(jié)束位置,即只有一個(gè)參數(shù)的時(shí)候返回到起始位置到末尾位置的項(xiàng)。
splice方法接受兩個(gè)或三個(gè)參數(shù)起始的位置、要?jiǎng)h除的項(xiàng)數(shù)或0、替換的或插入的項(xiàng)。
<code>splice(1,0)</code><code>splice(1,1)</code><code>splice(1,1,'a')</code>。重要的是理解每個(gè)參數(shù)的意思。
起始位置,項(xiàng)數(shù),插入替換的數(shù)據(jù),返回被操作的項(xiàng)的新數(shù)組。