JS引用类型之——数组

前言

数组作为JS中非常常用的引用类型,其功能是非常强大滴,今天小猪就彻底的看了下它。为了防止猪脑子不够用所以记录在案呐

1、数组的创建

var arrayObj = new Array(); //创建一个数组
     
var arrayObj = new Array([size]); //创建一个数组并指定长度,注意不是上限,是长度
     
var arrayObj = new Array([element0[, element1[, ...[, elementN]]]]); //创建一个数组并赋值


要说明的是,虽然第二种方法创建数组指定了长度,但实际上所有情况下数组都是变长的,也就是说即使指定了长度为5,仍然可以将元素存储在规定长度以外的,注意:这时长度会随之改变。

2、数组的元素的访问

var testGetArrValue=arrayObj[1]; //获取数组的元素值
     
arrayObj[1]= "这是新值"; //给数组元素赋予新的值


3、数组元素的添加

arrayObj. push([item1 [item2 [. . . [itemN ]]]]);// 将一个或多个新元素添加到数组结尾,并返回数组新长度
     
arrayObj.unshift([item1 [item2 [. . . [itemN ]]]]);// 将一个或多个新元素添加到数组开始,数组中的元素自动后移,返回数组新长度
     
arrayObj.splice(insertPos,0,[item1[, item2[, . . . [,itemN]]]]);//将一个或多个新元素插入到数组的指定位置,插入位置的元素自动后移,返回""。


4、数组元素的删除

arrayObj.pop(); //移除最后一个元素并返回该元素值
     
arrayObj.shift(); //移除最前一个元素并返回该元素值,数组中元素自动前移
     
arrayObj.splice(deletePos,deleteCount); //删除从指定位置deletePos开始的指定数量deleteCount的元素,数组形式返回所移除的元素

重点来看下splice()方法,这个方法恐怕要算是最强大的数组方法了,它有很多种用法。splice()的主要用途是向数组的中部插入项,但使用这种方法的方式则有如下三种:

  1. 删除:可以删除任意数量的项,只需指定2个参数L要删除的第一项的位置和要删除的项数。例如,splice(0,2)会删除数组中的前两项。

  2. 插入:可以向指定位置插入任意数量的项,只需提供3个参数:其实位置、0(要删除的项数)和要插入的项。如果要插入多个项,可以再传入第四、第五,以至任意多个项。例如,splice(2,0,"red","green")会从当前数组的位置2开始插入字符串"red"和"green"。

  3. 替换:可以向指定位置插入任意数量的项,且同时删除任意数量的项,只需指定3个参数:其实位置、要删除的项数和要插入的任意数量的项。插入的项数不必与删除的项数相等。例如,splice(2,1,"red","green")会删除当前数组位置2的项,然后再从位置2开始插入字符串"red"和“green”。

splice()方法始终都会返回一个数组,该数组中包含从原始数组中删除的项(如果没有删除任何项,则返回一个空数组)。

5、数组的截取和合并

arrayObj.slice(start, [end]); //以数组的形式返回数组的一部分,注意不包括 end 对应的元素,如果省略 end 将复制 start 之后的所有元素
     
arrayObj.concat([item1[, item2[, . . . [,itemN]]]]); //将多个数组(也可以是字符串,或者是数组和字符串的混合)连接为一个数组,返回连接好的新的数组



6、数组的拷贝

arrayObj.slice(0); //返回数组的拷贝数组,注意是一个新的数组,不是指向
     
arrayObj.concat(); //返回数组的拷贝数组,注意是一个新的数组,不是指向


7、数组元素的排序

arrayObj.reverse(); //反转元素(最前的排到最后、最后的排到最前),返回数组地址
     
arrayObj.sort(); //对数组元素排序,返回数组地址

其中比较有意思的是sort方法,在默认情况下,sort()方法按升序排列数组项——即最小值位于最前面,最大值排在最后面。为了实现排序,sort()方法会调用每个数组项的toString()转型方法,然后比较得到的字符串,以确定如何排序,即使数组中的每一项都是数值,sort()方法比较的也是字符串,如下面代码所示

var values=[0,1,5,10,15];
values.sort();
alert(values);     //0,1,10,15,5

可见,即使例子中值的书序没有问题,但sort()方法也会根据测试字符串的结果改变原来的顺序。因为数值5虽然小于10,但在进行字符串比较式,“10”则位于“5”的前面,于是数组的顺序就被修改了。这特么的怎么办呢?还好sort()方法可以接受一个比较函数作为参数,一边我们制定那个值位于哪个值的前面。

比较函数接收两个参数,如果第一个参数应该位于第二个之前则返回一个负数,如果两个参数相等则返回0,之后返回正数。以下就是一个简单的比较函数:

function compare(value1, value2){
    if(value1<value2){
        return -1;
    }else if(value1>value2){
        return 1;
    }else{
        return 0;
    }
}//这个比较函数可以适用于大多数数据类型,只要将其作为参数传递给sort方法即可,如下
var values = [0,1,5,10,15];
values.sort(compare);
alert(values);   //0,1,5,10,15

当然,可以利用比较函数来实现降序的结果,只要交换比较函数返回的值即可。

8、数组元素的字符串化

arrayObj.join(separator); //返回字符串,这个字符串将数组的每一个元素值连接在一起,中间用 separator 隔开。
     
toLocaleString 、toString 、valueOf://可以看作是join的特殊用法,不常用

以下方法在Ie9以下浏览器中不支持。

9、位置方法
ECMAScript5为数组实例添加了两个位置方法:indexOf()和lastIndexOf()。这两个方法都接收两个参数:要查找的项和(可选的)表示查找起点位置的索引。其中,indexOf()方法从数组的开头(位置0)开始向后查找,lastIndexOf()方法则从数组的末尾开始向前查找。

这两个方法都返回要查找的项在数组中的位置,或者在没找到的情况下返回-1.在比较第一个参数与数组中的每一项,会使用全等操作符;也就是说,要求查找的项必须严格相等(===)。

var numbers =[1,2,3,4,5,4,3,2,1];
  
alert(numbers.indexof(4));       //3
  
alert(numbers.lastIndexOf(4));   //5
  
alert(numbers,indexOf(4,4));     //5
alert(numbers.lastIndexOf(4,4)); //3
  
var person ={name:"Nicholas"};
var people = [{name:"Nicholas"}];
  
var morePeople = [person];
  
alert(people.indexOf(person));   //-1
alert(morePeople.indexOf(person));//0

10、迭代方法

  • every():对数组中的每一项运行给定函数,如果该函数对每一项都返回true,则返回true。

  • filter():对数组中的每一项运行给定函数,返回该函数会返回true的项组成的数组

  • forEach():对数组中的每一项运行给定函数,这个方法没有返回值。

  • map():对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组。

  • some():对数组中的每一项运行给定函数,返回该函数对任一项返回true,则返回true。

以上方法都不会修改数组中的包含的值。

var numbers = [1,2,3,4,5,4,3,2,1];
 
var everyResult = numbers.every(function(item,index,array){
    return (item >2);
});
alert(everyResult);//false
 
var someResult = numbers.some(function(item,index,array){
    return (item >2);
});
alert(someResult);//true
 
var filerResult =numbers.filter(function(item,index,array){
    return (item >2);
});
alert(filerResult);//[3,4,5,4,3]
 
var mapResult=numbers.map(function(item,index,array){
    return item*2;
});
alert(mapResult);//[2,4,6,8,10,8,6,4,2]
 
numbers.forEach(function(item,index,array){
    //执行某些操作
});

11、缩小方法

reduce() reduceRight()方法

原文地址:https://www.cnblogs.com/smallerpig/p/3646165.html