为啥子要总结这个数组操作方法呢,嗯~,主要是记性差,看了一遍又一遍就是记不住,可能是个鱼脑子。
操作后改变原数组的方法
- push():尾部添加,返回值为改变后的数组长度;
- pop():尾部删除,返回值为被删除元素;
- unshift():头部添加,返回值为改变后的数组长度;
- shift():头部删除,返回值为被删除元素
- splice():数组截取,返回值为被截取元素。
/*
* 参数一:start开始截取元素的下标
* 参数二:length,截取长度,不传则默认为start后所有的元素
* 参数三、四...:在截取位置处添加的元素
* */
var arr = [1,2,4,6,9,12,14,15,35,66,79];
var newArr = arr.splice(3,2,1); //arr=[1, 2, 4, 1, 12, 14, 15, 35, 66, 79];newArr =[6,9]
- sort():排序(原理:按照unicode码进行排序),返回值为排序后的数组。
var arr = [1, 2, 3, 2];
arr.sort(); //[1, 2, 2, 3]
var arr1 = [1,2,12,33,21,1];
arr1.sort(); //[1, 1, 12, 2, 21, 33]
/*总结:只有0-9之间的数字可以正常进行排列,如果要正常排列所有数据,需要给sort传递一个函数*/
arr1.sort(function(a,b){return a-b;}) //升序方法一 [1, 1, 2, 12, 21, 33]
arr1.sort(function (a,b) {
if(a>b){return 1;}
if(a<b){return -1;}
return 0;
}); //升序方法一 [1, 1, 2, 12, 21, 33]
arr1.sort(function(a,b){return b-a;}) //降序 [33, 21, 12, 2, 1, 1]
/*延伸:按照对象中的某个属性排序*/
var arr2 = [{id:10,age:2},{id:5,age:4},{id:6,age:10},{id:9,age:6},{id:2,age:8},{id:10,age:9}];
arr2.sort(function(a,b){
if(a.id == b.id){return b.age - a.age; //如果id相同,按照age的降序}
else{return a.id - b.id}
})
- reverse():翻转数组。
操作后不改变数组的方法
- slice(start,end):数组截取,返回值为被截取的元素。无参数时百世截取全部元素;有两个参数时,不包含截止位置(左闭右开);
- concat():合并两个或者多个数组,返回值为连接后的数组;
- join(str):将数组转换为字符串,返回值为使用参数连接起来的字符串;
- indexOf():返回第一个找到的元素下标;找不到返回-1。参数一:要查找的元素;参数二:开始下标;
- lastIndexOf():返回值指定字符串最后出现的位置,从指定的位置从后往前找;
/*参数一:指定元素;参数二:指定查找起始下标位置*/
var arr1 = [33, 21, 12, 2, 1, 1];
arr1.lastIndexOf(1); //5 ,参数二不传则默认为从最后一个元素开始查找,相当于参数为arr1.length-1
arr1.indexOf(1); //4 ,参数二不传默认为查找所有元素,相当于参数二为0
arr1.lastIndexOf(1,0) //-1
arr1.lastIndexOf(1,1); //-1
arr1.lastIndexOf(1,4) //4
arr1.lastIndexOf(1,5) //5
- arr.includes() :es6新增查找方法,判断数组中是否含有某个元素,返回布尔值。查找复杂的数组对象时,可用some()。
- find(): 找到并返回第一个符合条件的元素,找不到返回undefined。接受一个函数,该函数有三个参数:当前值、当前值的下标、这个数组对象。与filter的区别在于,filter以数组的形式返回所有满足条件的元素,而find只返回第一个符合条件的元素。
- findIndex(): 找到并返回第一个符合条件的元素下标,并停止查找;找不到返回-1。接受一个函数,该函数有三个参数:当前值、当前值的下标、这个数组对象。与lastIndexOf的区别在于,lastIndexOf常用于简单数组查找,findIndex用于数组对象。
es5中改变原数组的方法
1.forEach(): 遍历数组,无返回值,改变原数组。
/*接受一个函数,该函数有三个参数。
* 参数一:当前值;
* 参数二:当前值的下标;
* 参数三:这个数组对象
* */
var arr3 = [33, 21, 12, 2, 1, 1];
var m = arr3.forEach(function (current,index,array) {
array[index] = current+1;
}) //m:undefined
es5中不改变原数组的方法
以下四个方法都接收一个函数,该函数有三个参数(current,index,array)
- filter():过滤,以数组的形式返回符合条件的元素。
- every():运行给定的函数,每一项都为true时,则返回true,否则返回false,相当于&&。
- some(): 运行给定的函数,只要有一项为true时,就返回true,相当于||。
- map():遍历数组,有返回值。
es6新增
- isArray():判断一个元素是否为数组,返回布尔值。