Array - 77797963/review-notes GitHub Wiki
**isArray()**判断一个值是不是数组,是就返回true;
var a=[1,2,3];
alert(Array.isArray(a));//true
数组调用toString()方法返回数组中每个值的字符串形式拼接而成的一个以逗号为分隔符的字符串。
join()
接收一个参数,即分隔符,返回包含所有数组项目的字符串。如果不给此方法传参数或传入undefined,则使用逗号作为分隔符。
栈方法(后进先出)push(),pop()
push()
接收任意数量的参数,把它们逐个添加到数组末尾,并返回修改后数组的长度。
pop()
从数组末尾移除最后一项,减少数组的length值,并返回移除的项。
队列方法(先进先出)shift() unshift()
shift()
移除数组中的第一个项并返回该项,同时length减1,结合push()方法可以像使用队列一样使用数组。
unshift()
在数组前端添加任意个项并返回新数组的长度,结合pop()方法可以从相返的方向来模拟队列。
排序方法
reverse()
返转数组
sort()
默认情况下,按升序排序,选调用toString()然后比较得到的字符串。这种排序方法有的时候并不准确,因为sort()方法可以接收一个比较函数作为参数。比较函数接收两个参数,如果第一个参数应该位于第二个之前则返回一个负数,如果两个参数相等,则返回0,如果第一个参数应该位于第二个之后则返回一个正数。
function compart(value1,value2){// 升序
if(value1<value2){
return -1;
}else if(value1>value2){
return 1;
}else{
return 0;
}
}
var values=[0,1,5,10,15,2];
values.sort(compart);
alert(values);//0,1,2,5,10,15
function compart(value1,value2){//降序
if(value1<value2){
return 1;
}else if(value1>value2){
return -1;
}else{
return 0;
}
}
var values=[0,1,5,10,15,2];
values.sort(compart);
alert(values);//15,10,5,2,1,0
对于数值类型或者valueOf()方法会返回数值类型的对象类型,可以便用更简单的比较函数
function compare(value1,value2){
return value2-value1;
}
操作方法
concat()
基于当前数组创建一个副本,然后把接收到的参数添加到这个副本的末尾,最后返回新构建的数组。
var colors=['red,'green','blue'];
var color2=colors.concat('yellow',['black,'brown']);
alert(color2);//red,green,blue,yellow,black,brown
slice()
基于当前数组中的一个或多个项创建一个新数组。这个方法可以接收一个或两个参数,即要返回项的起始和结束位置。如果只有一个参数,就是从该参数指定的位置到数组末尾。这个方法不会影响原数组
var color=['red','green','blue','yellow','purple']
var color2=color.slice(1);
var color3=color.slice(1,4);
alert(color2);//green,blue,yellow,purple
alert(color3);//green,blue,yellow
splice()
主要用途是向数组的中部插入项,使用需要注意以下几点:
1.删除:可以删除任意数量的项,只需指定2个参数,要删除的第一项的位置和要删除的项数,如splice(0,2)会删除数组中前两项。
2.插入:可能向指定位置插入任意数量的项,需提供3个参数:起始位置,0(要删除的项数),和你要插入的项。如果要插入多个,可以再传第四个,第五个以至任意多个项,例如:splice(2,0,'red','green')从当前数组的位置2开始插入字符串'red','green'
3.替换:可以向指定插入任意数量的项,同时删除任意数组的项,只需指定3个参数:起始位置,要删除的项,和要插入的任意数量的项。插入的项数不必就删除的项数相等。例如:splice(2,1,'red','green')会删除当前数组位置2的项,然后再从位置2开始插入字符串'red,'green'。
这个方法始终都会返回一个数组,该数组包含从原始数组中删除的项,如果没有删除,则返回空数组。
位置方法
**indexOf() **
**lastIndexOf() **
这两个方法都接收两个参数:要查找的项和表示查找起点索引(可选)。其中indexOf()从数组的开头向后查找,lasIndexOf()从数组的末尾开始向前查找。最后都返回要查找的项在数组中的位置,没有找到返回-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);
});
alert(everyResult); //false
var someResult=numbers.some(function(item,index,array){
return (item > 2);
});
alert(someResult); //true
var filterResult=numbers.filter(function(item,index,array){
return (item >2);
})
alert(filterResult); //[3,4,5,4,3]
var mapResult=numbers.map(function(item,index,array){
return item*2;
})
alert(mapResult); //[2,4,6,8,10,8,6,4,2]
numbers.forEach(function(index,index,array){
//执行某些操作 此方法没有返回值
})
归并方法
reduce()
reduceRight()
这两个方法都会迭代数组的所有项,然后构建一个最终返回值。reduce()方法从数组的第一项开始,逐个遍历到最后。而reduceRight()则从数组的最后一项开始,向前遍历到第一项。
这两个方法都接收两个参数:一个在每一项上调用的函数和(可选的)作为归半基础的初始值。传给reduce()和reduceRight()的函数接收4个参数:前一个值,当前值,项的索引和数组对象。这个函数返回的任何值都会作为第一参数自动传给下一项。第一次迭代发生在数组的第二项上,因此第一个参数是数组的第一项,第二个参数就是数组的第二项。