您的位置:首页 > Web前端 > JavaScript

JavaScript的Array对象的方法(上)

2016-04-06 00:00 633 查看


一,数组的检测方法

ECMAScript3做出规定,可以使用instanceof操作符来检测数组

var colors = ["red","green","blue"];
//instanceof如果检测是数组,返回true;如果不是数组,返回false
alert(colors instanceof Array);//true
alert(typeof colors);//object

ECMAScript5新增了Array.isArray()方法来检测数组

var colors = ["red","green","blue"];
alert(Array.isArray(colors));//true

二,数组的转换方法

数组的转换方法,所有的对象都有toLocaleString()、toString()和valueOf()方法。

数组调用toString()方法,会返回数组中每个值的字符串形式拼接的以逗号分隔的字符串;

调用valueOf()方法,返回的还是这个数组。

示例1:

var colors = ["red","green","blue"];
alert(colors.toString());//red,green,blue
alert(colors.valueOf());//red,green,blue
alert(colors);//red,green,blue

我们发现输出都是red,green,blue,看上去没什么区别

alert(typeof colors.toString());//string
//由于alert()要接收一个字符串参数,所以它会在后台调用toString()方法
alert(typeof colors.valueOf());//object
alert(typeof colors);//object

示例2:

var person1 = {
toLocaleString:function(){
return "aaaa";
},
toString:function(){
return "bbbb";
}
};
var person2 = {
toLocaleString:function(){
return "cccc";
},
toString:function(){
return "dddd";
}
};
var people = [person1,person2];
alert(people);//bbbb,dddd   --调用了对象的toString()方法
alert(people.toString());//bbbb,dddd--调用了对象的toString()方法
alert(people.toLocaleString());//aaaa,cccc--调用了对象的toLocaleString()方法

数组集成的toLocaleString()、toString()和valueOf()方法,默认都会以逗号分隔字符串的形式返回数组项;那么如果来改变分隔符呢?我们可以使用join()方法,接收一个参数即用作分隔符的字符串。

var colors = ["red","green","blue"];
alert(colors.join(","));//red,green,blue
alert(colors.join("|"));//red|green|blue
//如果不给join()方法传入任何值或者传入undefined,则会以逗号分隔符
//IE7及更早的版本会错误的使用字符串"undefined"作为分隔符,您可以试试!
alert(colors.join());//red,green,blue
alert(colors.join(undefined));//red,green,blue

三,数组重排序方法

1,reverse()方法是反转数组项

示例1:

var values = [1,2,3,4,5];
values.reverse();
alert(values);//5,4,3,2,1
示例2:对于字符串的数组
var chars = ["abc","aaa","bbb","cccc"];
chars.reverse();
//这种情况下,并没有按照字典顺序进行排序,因此reverse()方法只是对数组进行反转项
alert(chars);//cccc,bbb,aaa,abc

2,sort()方法对数组进行排序,该方法比较灵活

示例1:

var values = [0,1,5,10,15];
values.sort();
//我们看到5是排在最后的,为什么会出现这样的结果呢?
//sort()方法比较的是字符串,如果是数值数组,会先将数值转换成字符串
//想深入了解可以参考:http://www.zhihu.com/question/21192050
alert(values);//0,1,10,15,5

示例2:sort()方法可以传入一个比较函数

var values =[0,1,5,10,15];
//比较函数接收两个参数,如果第一个参数比第二个参数小,则返回负数,如果第一个参数
//比第二个参数大则返回正数,如果相等则返回零
function compare(value1,value2){
if(value1<value2){
return -1;
}else if(value1>value2){
return 1;
}else{
return 0;
}
}
values.sort(compare);
alert(values);//0,1,5,10,15

示例3:如果想倒序排,怎么办呢?

//我们只需要将比较函数做一下调整
var values =[0,1,5,10,15];
//比较函数接收两个参数,如果第一个参数比第二个参数小,则返回负数,如果第一个参数
//比第二个参数大则返回正数,如果相等则返回零
function compare(value1,value2){
if(value1<value2){
return 1;//如果第一个参数比第二个参数小返回正数
}else if(value1>value2){
return -1;//如果第一个参数比第二个参数大返回负数
}else{
return 0;
}
}
values.sort(compare);
alert(values);//15,10,5,1,0

示例4:对于数值的数组,我们的比较函数可以这样写

var values =[0,1,5,10,15];
function compare(value1,value2){
//如果是第一个参数减去第二个参数表示正序
//如果是第二个参数减去第一个参数表示倒序
return value2 - value1;
}
values.sort(compare);
alert(values);//15,10,5,1,0

四,数组的操作方法

1,concat()方法,该方法是基于当前数组中的所有项创建一个新数组。

如果没有给concat()方法传递参数,则复制当前数组并返回副本;如果传递给concat()方法是一个或多个数组,则会将这些数组中的每一项添加到当前数组中;如果传递给concat()方法的不是一个数组,则这些值会被简单的添加到结果数组的末尾。

var colors = ["red","green","blue"];
var colors2 = colors.concat();
alert(colors2);//red,green,blue
var colors3 = colors.concat("yellow",["black","brown"]);
alert(colors3);//red,green,blue,yellow,black,brown


2,slice()方法,它能够基于当前数组中的一个或多个项创建一个新数组。

slice()方法接收一个或两个参数,即要返回的项的起始和结束位置;如果传入一个参数,则返回当前传入参数的位置到当前数组结束位置的新数组;如果传入两个参数,则返回起始和结束位置的新数组,但不包括结束位置的项,即前闭后开。注意:slice()不会影响原始数组。

示例:

var colors = ["red","green","blue","yellow","purple"];
var colors2 = colors.slice(1);
alert(colors2);//green,blue,yellow,purple
var colors3 = colors.slice(1,3);
alert(colors3);//green,blue 不包括位置3的"yellow"

拓展:如果slice方法的参数中有负数,则用数组的长度加上该负数来确定起始和结束位置

var colors = ["red","green","blue","yellow","purple"];
var colors2 = colors.slice(-2,0);
alert(colors2);//没有任何输出
var colors3 = colors.slice(-2,-1);//相当于colors.slice(colors.length-2,colors.length-1);即colors.slice(3,4);
alert(colors3);//yellow

五,splice()方法

方法用途如下:

删除:可以删除任意数量的项,只需指定2个参数:要删除的第一项的位置和要删除的项数。例如:splice(0,2);会删除数组中的前两项

插入:可以向指定位置插入任意数量的项,只需提供3个参数:起始位置、要删除的项数和要插入的项。如果插入多项,可以再传入第四项、第五项,以至更多个项。例如:splice(2,0,"red","green")会从当前数组的位置2开始插入字符串"red"和"green"。

替换:可以向指定位置插入任意数量的项,且同时删除任意数量的项,只需指定3个参数:起始位置、要删除的项数和要插入的任意数量的项。插入的项数不必与删除的项数相等。例如:splice(2,1,"red","green")会删除当前数组位置2的项,然后再从位置2开始插入字符串"red"和"green"。

注意:splice()方法始终返回一个数组,该数组包含从原始数组中删除的项,如果没有删除任何项,则返回一个空数组。

示例1:删除

var colors = ["red","green","blue"];
var remove = colors.splice(0,1);//删除数组的第一项"red"
alert(colors);//green,blue
alert(remove);//red

如果删除的项的起始位置大于数组的长度

var remove1 = colors.splice(3,1);
alert(colors);//red,green,blue
alert(remove1);//没有输入

同时如果删除项的起始位置为负数

var remove2 = colors.splice(-1,1);//相当于colors.splice(colors.length-1,1);即colors.splice(2,1)
alert(colors);//red,green
alert(remove2);//blue

如果删除项的起始位置为负数,并且该负数的正数值大于数组的长度则删除的永远是第一项

var remove3 = colors.splice(-500,1);
alert(colors);//green,blue
alert(remove3);//red

如果要移除的项数大于或等于数组的长度

var remove4 = colors.splice(0,4);
alert(colors);//空数组
alert(remove4);//red,green,blue

示例2:插入

var colors = ["red","green","blue"];
var insert = colors.splice(1,0,"yellow","black");
alert(colors);//red,yellow,black,green,blue
alert(insert);//空数组,因为splice的第二个参数是0

插入的参数可以是一个数组

var insert1 = colors.splice(1,0,["yellow","black"],"brown");
alert(colors);//red,yellow,black,green,blue
alert(insert1);//空数组

示例3:替换

var colors = ["red","green","blue"];
var replace = colors.splice(1,1,"red","purple");
alert(colors);//red,red,purple,blue
alert(replace);//green

下一篇:http://my.oschina.net/shenzhenjava/blog/654030
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  JavaScript Array js数组