JavaScript引用类型--数组常用方法
在ECMAScript中数组是非常常用的引用类型了。ECMAScript所定义的数组和其他语言中的数组有着很大的区别。首先要说的就是数组也是一种对象。
- 数组的概念、特性、常用方法
- 掌握Object,学会使用对象
- 了解其他引用类型对象
特点:
1.数组”即一组数据的集合。
2.js数组更加类似java的容器。长度可变,元素类型也可以不同!
3.数组长度随时可变!随时可以修改!(length属性)
-----创建数组方式------
//方式一:
var arr = new Array();
//方式二:
var arr = [1,2,3,4,true,new Date(),'abc']
arr.length;//查询数组长度,等于7
arr.length=3;//那么 arr = [1,2,3],相当于截取了前三。
常用方法 | 作用 | 返回值 |
---|---|---|
push | 向数组尾部追加元素,并改变原数组的值 | 新数组的元素个数, |
pop | 从数组的尾部移除一个元素,并改变原数组的值 | 移除的元素内容 |
shift | 从头部移除一个元素,并改变原数组的值 | 移除的元素内容 |
unshift | 向数组头部插入多个元素,并改变原数组的值 | 新数组的长度 |
splice | 截取的方法。第一个参数:起始位置,第二参数:表示截取的个数,第三个参数:新追加的新元素个数。不改变原数组的值 | 移除的元素内容 |
slice | 截取范围(左闭又开区间+/-)。不改变原数组的值 | 截取的元素内容 |
concat | 合并粘连的操作,不改变原数组的值 | 粘连后的新数组 |
join | 在每个元素组中间加入内容,不操作数组本身 | 原数组中间加入内容后的值 |
sort | 正序排序(按照每个字符串的字节比的,不能准确按照大小排序),改变原数组的顺序 | 原数组排序完的值 |
reverse | 倒序排序(按照集合中元素位置进行倒序排列,不按照大小排序),改变原数组的顺序 | 原数组排序完的值 |
示例
//先定义一个数组
var arr = [1,2];
******push*******
var result = arr.push(1,2,true);
那么arr=[1,2,1,2,true];result=5;
******unshift*******
arr.unshift(10,false)
那么arr=[10,false,1,2]
******join*******
var result = arr.join("-")
那么arr=[1,2]
那么result=[1-2]
******sort*******
var arr = [10,2,4,1,7];
arr result = arr.srot();
那么result=arr = [1,10,2,4,7];
//因为底层排序的方式,是字符对比着排序,所以不精确。一般项目中自己写compare方法比较:
function compare(value1,value2){
if(value1<value2){
return -1;
}else if(value1>value2){
return 1;
}else{
return 0;
}
}
//正常的 正序排列
arr.sort(compare);
ECMAScript5 Array新特性
方法 | 功能 | 描述 |
---|---|---|
indexOf | 位置方法 | 1个参数:获得此参数在数组中的索引。2个参数:第一个表示起始位置,第二个参数表示此参数在数组中出现位置的索引值。 |
lastIndexOf | 位置方法 | 同indexOf,不同的是lastIndexOf从后向前找。 |
-- | 以上 | 查找索引的时候 底层使用的是"==="方法。 |
every | 迭代方法 | |
filter | 迭代方法 | |
forEach | 迭代方法 | |
map | 迭代方法 | |
some | 迭代方法 | |
reduce | 缩小方法 | |
reduceRight | 缩小方法 |
迭代方法示例:
var arr = [1,2,3,4,5,6,7,8,2,5];
//对于数组的每一个元素,都用一个函数来运行
//function的三个参数:
1.**item:必须。当前元素的值
2.**index:可选。当前元素的索引值
3.**array:可选。当前元素属于的数组对象
4.**thisValue:可选。对象作为该执行回调时使用,传递给函数,用作 "this" 的值。如果省略了 thisValue ,"this" 的值为 "undefined"
*******every*******
//将数组的每一项元素传入function,返回的的是true,那么最终返回true。如果有一个返回false,剩余的元///素不会再进行检测,最后结果返回false
var result = every(funcrion(item,index,array,thisValue){
return item > 2;
})
alert(result);//result结果为false
*******filter*******
//将数组的每一项元素传入function,返回满足条件的元素数组
var result = arr.filter(function(item,index,array){
return item>6
})
alert(result);//result中元素为7,8
*******foreach*******
//将数组的每一项元素传入function,并且可以执行自定义的方法
arr.foreach(function(item,index,array){
//此处可执行自定义方法
alert(item)...
})
*******map*******
//将数组的每一个元素传入function,function执行完毕后,把新的结果返回
//也就是原数组被“映射”成对应新数组。下面这个例子是数值项求平方
var result = arr.map(function(item,index,array){
return item*item;
});
alert(result);//result为新的数组,元素为2,4,6,8,10,12,14,16,4,10
*******some******* 与every算是相反的方法
//将数组的每一项元素传入function,如果有一项返回true,最终返回true。如果每一项都返回false,最终返回false
var result = arr.some(function(item){
return item==1222;
})
alert(result);//fasle
*******reduce*******
//fnction参数:
1.前一个值
2.当前值
3.当前索引
4.当前数组
arr.reduce(function(prev,curr,index,array){
return prev+curr;//前一个值+当前值
})
alert result;//所有值的和
*******reduceRighte*******
arr.reduceRighte(function(prev,curr,index,array){
return prev+curr;//前一个值+当前值
})
> * reduce 与 reduceRighte相反,reduce从左向右执行,reduceRighte相反;