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相反;
来源:https://www.cnblogs.com/omery/p/9969104.html