数组常用方法
有序的值的集合 是一个对象 数组是使用数字作为索引的操作元素
索引:从0开始的整数 每一个数组都有元素,每一个元素在数值中都有一个位置,分别用数字表示
创建方式:
1.构造数组:
var arr = new Array ();
console.log(typeof arr); //object
1>.向数组中添加元素
语法:数组[索引] = 值;
arr[0] = 1;
2>.读取数组中的内容
语法:数组[索引];
索引超过最大取值,得到underfined
var arr = new Array();
arr[0] = 1;
arr[1] = 2;
console.log(arr,arr.length); //1,2 2
3>.获取数组长度,可以使用length属性,获取数组长度
语法:数组.length
对于连续的数组,使用length可获取到数组的长度(元素的个数)
对于不连续的数组,使用length会获取到数组的最大索引+1;
arr[100] = 24
console.log(arr.length); //101
4>. 修改length
如果修改的length大于原长度,则多出部分会空出来;
如果修改的length小于原长度,则多出的部分会删除;
var arr1 = new Array();
arr1[0] = 1;
arr1[1] = 2;
arr1[2] = 3;
arr1[3] = 4;
//console.log(arr1,arr1.length);
arr1.length = 10;
console.log(arr1,arr1.length); //如果修改的length大于原长度,则多出部分会空出来;
arr1.length = 2;
console.log(arr1,arr1.length); //如果修改的length小于原长度,则多出的部分会删除;
数组的操作push/pop/unshift/shift
1.push //从数组的尾部添加一个或多个元素,返回增加后数组的长度
2.pop() 从数组的尾部删除一个元素,返回这个删除的元素,原数组发生改变,不接受参数
3.unshift()从数组的头部增加元素,有几个参数增加几个元素,返回增加后的数组的长度,原数组发生改变
4.shift()从数组的头部删除一个元素,返回这个删除的元素,原数组发生改变,不接受参数
截取方式:slice 和 splice
slice: 原数组不发生变化
截取数据,返回原数据,需要将截取的数据封装到一个新数组中返回
第一个参数:截取开始位置的索引,包含起始索引
第二个参数:截取结束位置的索引,不包含结束索引
var a = arr(0,2);
第二个参数可以不写:可以截取从开始索引往后的所有元素
第二个参数可以是负值:则从后往前截取 -1:即位置为最后一个
splice: 原数组发生变化
截取数据,用来删除数据中指定的元素 需要将截取的数据封装到一个新数组中返回
使用splice会影响到原数组,将指定的元素从数据中删除
并将删除的元素作为返回值返回
参数:
第一个参数:开始位置的索引
第二个参数:删除的数量
第三个参数:可以传递一些新的元素,这些元素将自动插入到开始索引位置的前面
var arr = ["孙","猪","唐","莎"];
var b = arr.slice(0,2);
console.log(b); //孙 猪
console.log(arr); //孙 猪 唐 莎
var a = arr.splice(1,1,"牛魔王");
console.log(a); //猪
console.log(arr); //孙 牛魔王 唐 莎
join()
将数值转换成字符串
不会对原数据产生影响,会把转化后的字符串作为结果返回
在join()中可以指定一个字符串作为参数,这个字符串将会作为数组中元素的连接符
如果不指定连接符,默认为,
reverse():
用来反转数组,前面的去后面,后面的去前面;
该方法会直接修改原数据
var arr6 = ["孙","猪","唐","莎"];
//result = arr6.join("hello");
//console.log(result);
arr6.reverse();
console.log(arr6);
var arr7 = ["c","j","f","h","t"];
arr7.sort();////默认从小到大
arr7.reverse();//可以反着来
console.log(arr7);
sort():
用来对数组进行排序
会直接修改原数据
默认会按照Unicode编码排序
可以在sort()中添加一个回调函数,来指定排序规则
回调函数中定义两个形参
浏览器分别使用数组中的元素作为实参调用回调函数
使用哪个元素不一定,但是肯定的是a在b的前面;
浏览器会根据回调函数的返回值来确定元素的位置
返回一个大于0,则会交换位置
返回一个小于0,则位置不变
返回一个等于0的值,则位置不变
var arr8 =[1,5,6,8,11];
arr8.sort();
//console.log(arr8); //1,11,5,6,8
arr8.sort(function (a,b){
return a-b; //如果从大到小 return b-a
});
console.log(arr8);//1,5,6,8,11
总结:
原数组发生变化:
pop
push
unshift
shift
splice
reverse
sort
原数组没有发生变化:
slice
join
ES5新增数组方法:
1.forEach: 不接受返回值
forEach()方法需要一个函数作为参数
数组中有几个元素,函数就执行几次,每次执行时,浏览器会将遍历到的元素以实参形式传递进来,可以定义形参来读取内容
第一个参数 value:当前正在遍历的元素
第二个参数 index:当前正在遍历的元素的索引
第三个参数 obj:正在遍历的数组
forEach方法无法中断执行,总是会将所有成员遍历完。如果希望符合某种条件时,就中断遍历,要使用for循环。
2.map():对数组的所有成员一次执行参数函数 接受返回值 原数组没有发生变化
var arr = [1,2,3,5];
var a = arr.forEach(function(item){
//console.log(item);
return item+1;
});
var a = arr.map(function(item){
//console.log(item);
return item+1;
});
console.log(a);
var b = arr.filter(function(item){
return item>2;
})
console.log(b); //3,5
var arr = [1,2,3,5];
console.log(arr.indexOf(5),arr.indexOf(11)); //3, -1
var a = arr.some(function(item){
return item>2;
})
console.log(a); //true
var a = arr.every(function(item){
return item>2;
})
console.log(a); //false
3.filter(): 用于过滤数组成员,满足条件的成员组成一个 新数组返回 原数组不变
它的参数是一个函数,所有数组成员一次执行,返回结果为 true 的元素组成一个新数组返回
第一个参数:当前成员
第二个参数:当前成员的索引
第三个参数:整个数组
4.indexOf(): 从 头部 返回某个元素(第一次出现)在数组中的索引,没有该元素则返回 -1, 可以判断一个数组中是否有某个元素
lastindexOf(): 从 尾部 开始返回某个元素(最后一次出现)在数值中的索引, 没有该元素则返回 -1
5.some() every(): 返回布尔值,表示判断数组成员是否符合某条件、
参数为一个函数,成员一次执行
some(): 一个成员值为true 则为true
every();所有成员值为true ,则为true
6.reduce(): 将内部的返回值作为实参传递第一个形参,进行下一次运算
var arr =[1,2,3,5]
var sum = arr.reduce(function(a,b){
return a+b;
});
console.log(sum); //1+2+3+5=11
var users = [
{name: 'tom', email: 'tom@example.com',age:16},
{name: 'peter', email: 'peter@example.com',age:18}
];
users
.filter(function (person) {
return person.age>=18;
})
.forEach(function(e){
console.log(e)
});