JavaScript实验:数组操作

JavaScript中的数组对象自带了一些方法,可以通过使用这些方法来对数组进行操作。

join()

可以使用join()方法将数组中的成员合并到一个字符串中:

var o = [1,2,3];  
console.log(o.join());//1,2,3  
console.log(o.join(" "));//1 2 3  
var emptyArray = new Array(10);  
console.log(emptyArray.join("-"));//----------  

从上面的例子中可以看到,如果join()方法不带参数,那么JavaScript会用逗号作为分隔符将所有的成员合并到一个字符串中;如果join()方法接受参数,那么这个参数会作为分隔符来使用。

reverse()

可以使用reverse()方法将数组中的成员顺序进行颠倒:

//reverse()
o.reverse();  
console.log(o);//[3,2,1]  

可以看到,调用reverse()语句后,数组自身将发生改变。

执行reverse()语句的返回结果为发生改变后的数组对象。

sort()

可以使用sort()方法对数组中的成员进行排序(默认以字母顺序排列)。与reverse()语句一样,sort()语句会对数组自身进行修改并返回修改后的数组对象:

var a = ["Phone", "Mobile",,,"Canon"];  
a.sort();  
console.log(a);//["Canon", "Mobile", "Phone", undefined, undefined]  
var b = [33,44,111];  
console.log(b.sort());//[111, 33, 44]  
console.log(b.sort(function(a,b){return a-b}));//[33, 44, 111]  

可以看到,sort()语句还接受一个function作为参数来实现自定义排序。

concat()

可以使用concat()方法对数组进行拼接:

var c = [1,2,3];  
console.log(c.concat(4));//[1, 2, 3, 4]  
console.log(c.concat(5,6));//[1, 2, 3, 5, 6]  
console.log(c.concat([7,8]));//[1, 2, 3, 7, 8]  
console.log(c.concat([9,10], [11,12]));//[1, 2, 3, 9, 10, 11, 12]  
console.log(c.concat([42,43,[44,45]]));//[1, 2, 3, 42, 43, [44, 45]]  
console.log(c);//[1, 2, 3]  

可以看到,与reverse()和sort()不同,concat()语句仅仅只是返回拼接后的结果而已,对数组自身不会产生任何修改。

slice()

可以使用slice()语句来获取数组中的子数组(sub-array):

var d = [1,2,3,4,5,6];  
console.log(d.slice(0,3));//[1,2,3]  
console.log(d.slice(3,1));//[]  

与concat()一样,slice()语句仅仅只是返回操作后的结果而已,对数组自身不会产生任何修改。对于slice()语句中的两个参数,JavaScript遵循“前包括后不包括”的原则:第一个参数所指定的数组成员会出现在子数组中,而第二个参数所指定的数组成员则不会出现。

splice()

可以使用splice()语句来对数组进行插入和敲除操作。其第一个参数指定插入或敲除的位置(位置成员),第二个参数指定敲除成员的数目(从位置成员开始敲除),从第三个参数开始,所有的参数都会被插入到数组中(从位置成员之前进行插入)。splice()语句返回的结果为被敲除的数组成员所组成的数组。与concat()和slice()不同,splice()会对数组自身产生修改。

var e = [1,2,3,4,5,6,7];  
console.log(e.splice(1,2));//[2,3]  
console.log(e);//[1,4,5,6,7]  
console.log(e.length);//5  
e.splice(1,0,2,3,[4,5]);  
console.log(e);//[1, 2, 3, [4, 5], 4, 5, 6, 7]  

本文实验代码: http://jsfiddle.net/cshao/gGBmE/1/