js对数组的操作:
p.length:获取数组的长度
push():在数组的末尾添加一个或多个项目
unshift():在数组的开头添加一个或多个项目
pop():从数组中删除最后一个项目
shift():从数组中删除第一个项目
重排序方法:
reverse():反转数组项的顺序
sort():默认情况下按升序排列数组项,会调用每个数组项的toString()转型方法,再比较得到的字符串,即使数组中每一项都是数值,比较的也是字符串
var val=[0,1,5,10,15];
val.sort();
console.log(val);//0,1,10,15,5
上述例子,数值5虽然小于10,但是在进行字符串比较时,“10”位于“5”前面,于是数组的顺序被改变了,但是这种方法在多数情况下不是最佳方案。但是可以接收一个比较函数作为参数,便于我们指定哪个值位于哪个值前面
function compare(val1, val2){
if(val1<val2){
return 1;
}
else if(val1>val2){
return -1;
}
else{
return 0;
}
}
var values=[0,1,5,10,15];
values.sort(compare);
console.log(values);//15,10,5,1,0
操作方法:
concat():基于当前数组中的所有项创建一个新数组,具体说,先创建当前数组的一个副本,再将接收到的参数添加到这个副本的末尾,返回副本。若没有参数则只是复制当前数组的副本,若参数是一个或多个数组则将每一项都添加到结果数组中,若值不是数组,则值被简单添加到结果数组的末尾
var colors=["red","green","blue"];
var colors1=colors.concat("yellow",["black","brown"]);
console.log(colors);//red,green,blue
console.log(colors1);//red,green,blue,yellow,black,brown
slice():基于当前数组中的一个或多个项创建一个新数组,接收一个或两个参数,既要返回项的起始和结束位置。若只有一个参数,返回从指定位置开始到当前数组末尾的所有项。若有两个参数,返回起始和结束位置之间的项,但不包括结束位置的项。若参数中有一个为负数,则用数组长度加上该数来确定相应位置,若结束位置小于起始位置则返回空数组。注意slice方法不会影响原始数组
var colors=["red","green","blue","yellow","purple"];
var colors1=colors.slice(1);
var colors2=colors.slice(3,4);
var colors3=colors.slice(-2,-1);
console.log(colors);//red,green,blue,yellow,purple
console.log(colors1);//green,blue,yellow,purple
console.log(colors2);//yellow
console.log(colors3);//yellow
splice():主要是向数组的中部插入项,使用方式有如下3种:
删除:可以删除任意数量的项,需指定2个参数:要删除的第一项的位置和要删除的项数,如,splice(0,2)删除数组中的前两项
插入:可以向指定位置插入任意数量的项,需提供3个参数:起始位置、0(要删除的项数)、要插入的项,若要插入多项,再传入第四、第五及任意多项,如,splice(2,0,"red","green")从当前数组的位置2开始插入字符串
替换:可以向指定位置插入任意数量的项,且同时删除任意数量的项,需指定3个参数:起始位置、要删除的项数、要插入的任意数量的项。插入的项数不必与删除的项数相等,如,splice(2,1,"red","green")先删除当前数组位置2的项,再从位置2开始插入字符串
位置方法:
indexOf()和lastIndexOf():都接收两个参数:要查找的项和(可选)查找起点位置的索引,indexOf()从数组开头开始向后查找,lastIndexOf()从数组末尾开始向前查找,返回要查找的项在数组中的下标,没找到返回-1
迭代方法:
ECMAScript5为数组定义了5个迭代方法,每个方法都接收两个参数:要在每一项运行的函数和(可选)运行该函数的作用域对象------影响this的值。传入这些方法中的函数接收三个参数:数组项的值、该项在数组中的位置和数组对象本身。根据使用方法不同,函数执行后的返回值可能会也可能不会影响方法的返回值。以下是5个迭代方法的作用:
- every():对数组中的每一项运行给定函数,若函数对每一项都返回true,则返回true
- filter():对数组中的每一项运行给定函数,返回该函数会返回true的项组成的数组
- forEach():对数组中的每一项运行给定函数,没有返回值
- map():对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组
- some():对数组中的每一项运行给定函数,如果该函数对任一项返回true,则返回true
以上方法都有不会修改数组中包含的值
var numbers=[1,2,3,4,5,4,3,2,1];
var everyResult=numbers.every(function(item,index,array){
return (item>2);
});
console.log(everyResult);//false
var someResult=numbers.some(function(item,index,array){
return (item>2);
});
console.log(someResult);//true
var filterResult=numbers.filter(function(item,index,array){
return (item>2);
});
console.log(filterResult);//3,4,5,4,3
var mapResult=numbers.map(function(item,index,array){
return (item*2);
});
console.log(mapResult);//2,4,6,8,10,8,6,4,2
numbers.forEach(function(item,index,array){
//需要执行的操作
});
归并方法:
reduce()和reduceRight():都会迭代数组的所有项,构建一个最终返回值,reduce()从数组的第一项开始追个遍历到最后,reduceRight()从数组的最后一项开始向前遍历每一项。两个方法都接收两个参数:一个在每一项调用的函数和(可选)作为归并基础的初始值。函数接收4个参数:前一个值、当前值、项的索引、数组对象,这个函数返回的任何值都会作为第一个参数自动传给下一项。第一次迭代发生在数组的第二项上,因此第一个参数是数组的第一项,第二个参数是数组的第二项
var number=[1,2,3,4,5];
var sum=number.reduce(function(prev,cur,index,array){
return prev+cur;
});
console.log(sum);//15
var sum1=number.reduce(function(prev,cur,index,array){
return prev+cur;
},5);
console.log(sum1);//20