创建数组
- 使用Array构造函数
var a = new Array()
var b = new Array(5); //创建长度为5的数组
var c = new Array("a","b","c");
- 使用数组字面量表示法
var a = [];
var b = [5]; //创建一个含数字5的数组
var c = ["a","b","c"];
数组属性
length
表示数组的长度
var colors = ["red","green","blue","black"];
colors.length //4
length
属性并不是只读的,通过设置该值可以从数组末尾删除项或向数组中添加项
var colors = ["red","green","blue","black"];
colors.length = 2; //colors:["red","green"]
colors.length = 4; //colors:["red","green",undefined,undefined]
数组方法
-
栈、队列方法
-
push(item...)
向数组中添加元素,返回修改后数组的长度
var numbers= [1,2,3,4];
numbers.push(5) //5 numbers:[1,2,3,4,5]
numbers.push(6,7) //7 numbers:[1,2,3,4,5,6,7]
-
pop()
从数组末尾移除一项,减少数组的长度,返回移除的项
var numbers= [1,2,3,4];
numbers.pop() //4 numbers:[1,2,3]
-
unshift(item...)
向数组前端添加任意项,返回** 修改后数组的长度 **
var numbers= [1,2,3,4];
numbers.unshift(5) //5 numbers:[5,1,2,3,4]
numbers.unshift(6,7) //7 numbers:[6,7,5,1,2,3,4]
-
shift()
移除数组第一项,减少数组的长度,返回移除的项
var numbers= [1,2,3,4];
numbers.shift() //1 numbers:[2,3,4]
-
排序方法
-
reverse()
反转数组项的顺序,改变原数组
var numbers= [1,2,3,4];
numbers.reverse() //[4,3,2,1] numbers:[4,3,2,1]
-
sort()
默认情况下,即无参数情况,sort()
方法按升序排列数组。该方法会调用每个数组项的tostring()
方法,然后比较字符串,因此即使数组中每一项都是数值,sort()
方法比较的也是字符串。
var numbers= [1,15,5,10];
numbers.sort() //[1, 10, 15, 5] numbers:[1, 10, 15, 5]
sort()
方法可以接受一个比较函数作为参数。其中比较函数接受两个参数,如果两个参数排序不需要交换位置则返回负数,如果需要交换位置则返回一个正数,如果两个参数相等则返回0。
var numbers= [1,15,5,10];
function compare(val1,val2){
if(val1 < val2){
return -1;
}
else if(val1 > val2){
return 1;
}
else{
return 0;
}
}
numbers.sort(compare) //[1, 5, 10,15] numbers:[1, 5, 10,15]
-
操作、位置方法
-
concat()
其参数可以是一个或多个项,也可以是一个或多个数组。创建一个当前数组的副本,然后在数组末尾添加参数项,并返回新的数组,原数组不变
var numbers= [1,2,3,4];
numbers.concat(5,[6,7]) //[1,2,3,4,5,6,7] numbers:[1,2,3,4]
-
slice()
获取截取数组,如果是一个参数,则获取从该参数位置开始到数组结束所有值,如果有两个参数,则获取从起始值位置到结束值位置的值(不包括结束值位置项),返回新的数组。原数组不变
如果结束值小于起始位置则返回空数组。
var numbers= [1,2,3,4];
numbers.slice(2) //[3,4] numbers:[1,2,3,4]
numbers.slice(1,3) //[2,3] numbers:[1,2,3,4]
** 注意:** * 如果参数中存在负数,则将参数值加上数组长度来计算。如:*
var numbers= [1,2,3,4];
numbers.slice(-1) //[4] numbers:[1,2,3,4]
numbers.slice(-4,-2) //[1,2] numbers:[1,2,3,4]
-
splice()
返回删除项组成的数组,原数组被改变- 删除 :从指定位置删除指定项数
splice(0,3)
表示删除数组的[0][1][2]位置的三项 - 插入 : 从指定位置删除0项,再添加项
splice(1,0,3,4)
表示从数组的第[1]项开始插入3,4两个值 - 替换 :从指定位置删除指定项数,再添加项
splice(1,2,3,4)
表示从数组[1][2]位置上的值被替换成3,4两个值
- 删除 :从指定位置删除指定项数
var numbers= [1,2,3,4];
numbers.splice(1,2) //[2,3] numbers:[1,4]
numbers.splice(1,0,2,3,4,5) //[] numbers:[1,2,3,4,5,4]
numbers.splice(2,2,4,5) //[3,4] numbers:[1,2,4,5,5,4]
4. `indexOf()`从前向后查找,接受两个参数:查找的项和查找的起点位置(可选),默认从数组的起始位置向后查找,返回**索引值**
```javascript
var numbers= [1,2,3,4,4,5,3,1,2];
numbers.indexOf(2) //1 numbers:[1,2,3,4,4,5,3,1,2]
numbers.indexOf(2,4) //8 numbers:[1,2,3,4,4,5,3,1,2]
-
lastIndexOf()
从后向前查找,接受两个参数:查找的项和查找的起点位置(可选),默认从数组的结束位置向前查找,返回索引值
var numbers= [1,2,3,4,4,5,3,1,2];
numbers.lastIndexOf(2) //8 numbers:[1,2,3,4,4,5,3,1,2]
numbers.lastIndexOf(4,3) //3 numbers:[1,2,3,4,4,5,3,1,2], 从[3]位向前查找
-
遍历方法
-
every(fn)
对数组中的每一项运行给定的函数,如果该函数对每一项都返回true,则返回true
var numbers= [1,2,3,4,5];
numbers.every(function(item,index,array){
return (item>0);
}) //true
numbers.every(function(item,index,array){
return (item>2);
}) //false
-
filter(fn)
对数组中的每一项运行给定的函数,返回该函数会返回true的项组成的数组
var numbers= [1,2,3,4,5];
numbers.filter(function(item,index,array){
return (item>2);
}) //[3,4,5]
-
forEach(fn)
对数组中的每一项运行给定的函数,没有返回值 -
map(fn)
对数组中的每一项运行给定的函数,返回每次函数调用的结果组成的数组
var numbers= [1,2,3,4,5];
numbers.map(function(item,index,array){
return (item+10);
}) //[11,12,13,14,15]
-
some(fn)
对数组中的每一项运行给定的函数,如果该函数对任一项返回true,则返回true
var numbers= [1,2,3,4,5];
numbers.some(function(item,index,array){
return (item>3);
}) //true
-
归并方法
以下两个方法都接受两个参数,一个是在数组每一项上调用的函数,另一个可选参数是作为归并基础的初始值。其中作为参数的函数接受4个参数:前一个值、当前值、项和索引和数组对象。这个函数返回的任何值都会作为第一个参数自动传给下一项
-
reduce(fn)
从头开始遍历 -
reduceRight(ffn)
从尾开始遍历
var numbers= [1,2,3,4,5];
numbers.reduce(function(pre,cur,index,array){
return pre+cur;
}) //15 对数组求和
numbers.reduce(function(pre,cur,index,array){
return pre+cur;
},10) //25 以10为基数对求数组求和