javaScript(数组)

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