前言

数组作为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()方法

JS引用类型之——数组的更多相关文章

  1. 引用类型之数组array最全的详解

    Array类型 今天总结一下array类型. js中的数组是有着非常强大的功能.具有很大的灵活性,有两个方面的特点 1.数组的每一项可以保存任何的数据类型:2.数组大小可以动态的调整:看下面的例子: ...

  2. 从一个简单例子来理解js引用类型指针的工作方式

    <script> var a = {n:1}; var b = a; a.x = a = {n:2}; console.log(a.x);// --> undefined conso ...

  3. JS Jquery去除数组重复元素

    js jquery去除数组中的重复元素 第一种:$.unique() 第二种: for(var i = 0,len = totalArray_line.length;i < len;i++) { ...

  4. 多动手试试,其实List类型的变量在页面上取到的值可以直接赋值给一个js的Array数组变量

    多动手试试,其实List类型的变量在页面上取到的值可以直接赋值给一个js的Array数组变量,并且数组变量可以直接取到每一个元素var array1 = '<%=yearList =>'; ...

  5. js中的数组

    上网查了一下,js中的数组包含的内容还真不少.先给出两个学习的链接: w3school链接:http://www.w3school.com.cn/js/js_obj_array.asp 博客园链接:h ...

  6. JS与PHP数组操作的不同

    JS与PHP数组操作的不同 1.JS 中向数组中添加元素,必须指定下标 2.php中向数组中添加元素,可以不指定下标(追加) 3.JS 中数组元素的下标,是连续 4.PHP中数组元素的下标,可以不连续 ...

  7. 关于 js 2个数组取差集怎么取

    关于 js 2个数组取差集怎么取? 例如求var arr1 = [1]; var arr2 = [1,2];的差集方法一: Array.prototype.diff = function(a) { r ...

  8. 有几数组表单,js怎么获得数组并动态相加输出到文本框

    有几数组表单,js如何获得数组并动态相加输出到文本框<input   name= "fee1[] "> <input   name= "fee2[] & ...

  9. JS中Array数组的三大属性用法

    原文:JS中Array数组的三大属性用法 Array数组主要有3大属性,它们分别是length属性.prototype属性和constructor属性. JS操作Array数组的方法及属性 本文总结了 ...

随机推荐

  1. Google账户_GooglePlay_关联

    PS:这过程叫一个折腾...穷逼的无奈啊... 1. 1.1. 网上搜到说,安装 google play & google框架服务,手机需要root,没去证实这个事情... 用了之前的 And ...

  2. jquery+ajax(用ajax.dll)实现无刷新分页

    利用ajax.dll那种方式的无刷新,在这就不说了,新朋友可以看下我的另一片文件http://www.cnblogs.com/dachuang/p/3654632.html 首先,这里用的是jquer ...

  3. XML 解析器

    所有现代浏览器都内建了供读取和操作 XML 的 XML 解析器.解析器把 XML 转换为 XML DOM 对象 - 可通过 JavaScript 操作的对象. 解析 XML 文档为DOM对象 方法一: ...

  4. iOS开发之 获取手机的网络的ip地址

    首先在使用的地方导入 #include <ifaddrs.h> #include <arpa/inet.h> 然后直接调用 - (NSString *)getIPAddress ...

  5. js树目录结构

    jstree https://www.jstree.com/demo/ treejs http://www.treejs.cn/v3/demo.php#_206

  6. phalcon: router规则与解析,已经生成router的链接地址

    本人采用的是假分模块(目录),通过命名空间来进行模块分组的,非官方分组,所以在router是都会加上 namespace 信息,你也可适当的参考: 前提: /** * 注册命名空间 */ $loade ...

  7. VB6 GDI+ 入门教程[9] Bitmap魔法(2):数据读写

    本文转自 http://vistaswx.com/blog/article/category/tutorial/page/2 VB6 GDI+ 入门教程[9] Bitmap魔法(2):数据读写 200 ...

  8. PhoneGap插件开发流程

    前几天写了一个PhoneGap插件,这个插件的功能很简单,就是开启viewport设置.不过与其它插件相比,有好几个有意思的地方,仔细读了PhoneGap的源码才搞定.这里记录一下PhoneGap插件 ...

  9. jq实现全选非全选

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  10. js数据类型和关系运算语法

    var box=; alert(typeof box); //box是Undefined类型,值是undefined,类型返回的字符串是undefined var box=true; alert(ty ...