数组
在ECMAScript中数组是非常常用的引用类型了。ECMAScript所定义的数组和其他语言中的数组有着很大的区别。那么首先要说的就是数组也是一种对象。
特点:
- 在JS中,”数组”即一组数据的集合长度可变,元素类型也可以不同!
- 数组长度随时可变!随时可以修改!(length属性)
一般来说我们定义数组的方法很简单,直接使用[]
即可,当然也可以使用new Array()
这样的构造函数的形式,不过并不常用。对于数组本身本没有太多可以说的东西,还是直接来过一遍它的方法
Array实例的方法
push
:向数组尾部添加元素(可多个)1
2
3
4var arr =[];
var result = arr.push(1,true);
// arr =[1,true]
// result=2;push方法返回值为新数组的长度pop
:从数组尾部移除一个元素1
2
3
4var arr =[1,true];
var result = arr.pop();
// arr=[1]
// result = true;pop方法返回值为被移除的元素shift
:从数组头部删除一个元素1
2
3
4var arr = [1,2,true,new Date()];
var result = arr.shift();//
// arr =[2, true, Fri May 20 2016 00:50:33 GMT+0800 (中国标准时间)]
// result = 1;shift方法返回值为被移除的元素unshift
:向数组头部添加元素(可多个)1
2
3
4var arr = [];
var result = arr.unshift(1,2,false);
// arr = [1, 2, false]
// result = 3 ; unshift方法返回新数组的长度splice
:数组截取/插入的方法(操作数组本身)- 第一个参数:截取的起始位置
- 第二个参数:表示截取的个数
- 第三个参数以后:从截取处插入新的元素(可多个)
1
2
3
4var arr = [1,2,3,4,5];
var result = arr.splice(1,2,3,4,5);
// arr = [1, 3, 4, 5, 4, 5];splice方法操作直接操作数组本身
// result = [2,3];splice方法返回被截取的元素
slice
:数组截取(不操作数组本身)1
2
3
4var arr = [1,2,3,4,5];
var result = arr.slice(2,4);
// arr = [1,2,3,4,5];不操作数组本身
// result = [3,4];slice方法返回被截取的元素concat
:链接两个数组的方法(不操作数组本身)1
2
3
4
5
6var arr1 = [1,2,3];
var arr2 = [true,5];
var result = arr1.concat(arr2);
// arr1 = [1, 2, 3];
// arr2 = [true, 5];
// result = [1, 2, 3, true, 5];concat方法返回链接后的新数组join
:在每个元素之间加入内容(不操作数组本身)1
2
3
4var arr = [1,2,3,4,5];
var result = arr.join("-");
// arr = [1, 2, 3, 4, 5];
// result = "1-2-3-4-5"; join方法返回每个元素加入内容后的字符串sort
:排序(直接操作数组本身)- sort方法默认按照字符串形式的utf编码进行排序,需要确切的正序或倒序排序时,需要写入自己的函数
1
2
3
4
5
6
7
8var arr = [1,345,23,22,10,9];
var result1 = arr.sort();
// arr = [1, 10, 22, 23, 345, 9]
// result1 = [1, 10, 22, 23, 345, 9]sort方法返回排序后的数组
var result2 = arr.sort(function(a,b){
return a-b;
});
// result2 = [1, 9, 10, 22, 23, 345];正确的从小到大排列
- sort方法默认按照字符串形式的utf编码进行排序,需要确切的正序或倒序排序时,需要写入自己的函数
reverse
:数组反转(直接操作数组本身)1
2
3
4var arr = [12,324,543,10,9];
var result = arr.reverse();
// arr = [9, 10, 543, 324, 12];
// result = [9, 10, 543, 324, 12]; //返回反转后的数组indexOf
:正序查找元素的索引(0开始)- 只有一个参数时,表示待查找的元素
- 两个参数时,第一个参数表示表示待查找的元素,
第二个参数从第几个元素开始查1
2
3
4
5
6
7var arr = [1,2,3,4,5,4,3,2,1];
var result1 = arr.indexOf(4)
var result2 = arr.indexOf(4,4)
// arr = [1,2,3,4,5,4,3,2,1];
// result1 = 3;返回值为查找到的元素索引
// result2 = 5
// 没有返回-1
lastIndexOf
:倒序版本:倒序查找元素的索引(最后一个元素开始)- 只有一个参数时,表示待查找的元素
- 两个参数时,第一个参数表示待查找的元素,第二个参数表示从倒数第几个元素开始查
1
2
3
4
5
6
7var arr = [1,2,3,4,5,4,3,2,1];
var result1 = arr.lastIndexOf(4)
var result2 = arr.lastIndexOf(4,4)
// arr = [1,2,3,4,5,4,3,2,1];
// result1 = 5;返回值为查找到的元素索引
// result2 = 3
// 没有返回-1
forEach
:循环数组的每一个元素,并且对每一项执行一个方法。没有返回值(不操作数组本身)1
2
3
4
5
6var arr = [1,2,3,4,5];
var result = arr.forEach(function(item,index,arr){
return item+1;
})
// arr = [1, 2, 3, 4, 5];
// result = undefined;forEach方法没有返回值map
:循环数组的每一个元素,并且对每一项执行一个方法,执行完毕后,新的数组返回(不操作数组本身)1
2
3
4
5
6var arr = [1,2,3,4,5];
var result = arr.map(function(item,index,arr){
return item+1;
})
// arr = [1, 2, 3, 4, 5];
// result = [2, 3, 4, 5, 6];map方法返回运行函数后的新数组filter
:对于数组的每一个元素,进行一个函数的运行,给定条件去执行,返回过滤后的结果(不操作数组本身)1
2
3
4
5
6var arr = [1,2,3,4,5];
var result = arr.filter(function(item,index,arr){
return item>2;
})
// arr = [1,2,3,4,5];
// result = [3,4,5];返回满足条件的值every
:对于数组的每一个元素都执行一个函数,如果都返回true
,最后则返回true
;如果有一个返回false
,最后结果返回false
.(不操作数组本身)1
2
3
4
5
6
7
8
9
10var arr = [1,2,3,4,5];
var result1 = arr.every(function fun(item,index,arr){
return item > 2;
});
var result2 = arr.every(function fun(item,index,arr){
return item > 0;
});
// arr = [1,2,3,4,5];
// result1 = false;不全部满足条件
// result2 = true;全部满足条件some
:对于数组的每一个元素都执行一个函数,如果有一项返回true
,最后则返回true
;如果每一项返回false
,最后结果才返回false
.(不操作数组本身)(与上一个every
相反)1
2
3
4
5
6
7
8
9
10var arr = [1,2,3,4,5];
var result1 = arr.some(function fun(item,index,arr){
return item>=5;
});
var result2 = arr.some(function fun(item,index,arr){
return item<0;
});
// arr = [1,2,3,4,5];
// result1 = true;不全部满足条件
// result2 = false;每一项都返回falsereduce
:最终构建一个返回值,接收一个函数作为累加器(accumulator),数组中的每个值(从左到右)开始合并,最终为一个值。1
2
3
4
5
6
7
8
9
10
11
12var arr = [1,2,3,4,5];
/**
* perv:前一个值
* cur:当前值
* index:当前索引位置
* arr:原数组
**/
var result = arr.reduce(function(perv,cur,index,arr){
return perv +cur;
});
// arr = [1,2,3,4,5];
// result = 15;reduceRight
:倒序版本:最终构建一个返回值,
遍历的起始位置不同1
2
3
4
5
6
7
8
9
10
11
12var arr = [1,2,3,4,5];
/**
* perv:前一个值
* cur:当前值
* index:当前索引位置
* arr:原数组
**/
var result = arr.reduceRight(function(perv,cur,index,arr){
return perv +cur;
});
// arr = [1,2,3,4,5];
// result = 15;