数组中常用的方法

来源:互联网 发布:速干运动短裤 淘宝 编辑:程序博客网 时间:2024/05/19 16:06

首先我们必须明确数组也是对象数据类型的。
当我们在typeof []=”object”;
数组也有属性名,只不过属性名是数字,我们把数字属性名 称之为“索引”:数组以数字作为索引,索引是从零开始,有一个length属性代表数组的长度。

注:数组中可以存储任何值。

我们还需要注意一点的是类数组与数组的区别:
首先明确类数组,类数组顾名思义,类似数组,但又不是数组。
一、拥有length属性,其它属性(索引)为非负整数(对象中的索引会被当做字符串来处理,这里你可以当做是个非负整数串来理解)
二、不具有数组所具有的方法。
像getElementsByTagName获取的元素集合以及函数中的实参集合arguments都是类数组。

啰嗦了一堆关于数组的基本知识,接下来就是介绍数组中常用的操作方法。
首先明确的是数组中很多常用的方法,都是在 Array.prototype 下执行的。

1、数组的增加 push unshift
push()向数组末尾追加新内容
参数:1到多个,任何数据类型都可以,想要给数组末尾追加什么,直接传递到push方法中即可,传递多个用逗号隔开。
返回值:新增后数组的长度。
导致原有的数组发生了改变。。。

unshift()向数组开头追加新内容
参数:需要追加的内容可以是多个任何数据类型的值
返回值:新增后数组的长度。
导致原有的数组发生了改变。。。

在向数组中添加内容,其实我们可以把数组当做普通对象,使用对象键值对的操作,给其设置新的属性(索引)
ary[ary.length]=xxx 向数组的末尾追加了新的内容

2、数组中删除pop shift
pop:删除数组中的最后一项。
参数:无
返回值:被删除的那一项的内容
原有的数组发生了改变。。。

shift:删除数组中的第一项
参数:无
返回值:被删除的那一项。
原有的数组发生了改变。。。

我们在这里需要注意的是:在使用shift删除数组的第一项的时候,后面的每一项的索引都要加一(导致后面的索引发生改变)。

当然我们也可以使用关键字delete把数组当做对象进行删除

delete ary[索引]删除指定索引这一项(当前删除之后,数组中所有其他项都不会改变,当前数组的length也不会改变)。

除此之外,我们还可以使用ary.length--; 删除数组的最后一项。

3、splice()数组中的此方法可以实现数组的增加、删除、修改。
那我们看一看,splice是如何使用的

splice(n,m) 实现删除:从索引n处开始,删除m个。(如果m不写删除到数组的末尾;n和m都不写(splice()),一项都不删除,返回的是空数组。)

splice(0)清空数组
返回值:被删除的内容(以一个新数组保存)
原有数组发生了改变

splice实现修改
splice(n,m,x)在原有的基础上,有x代替删除的内容。

var = ary[12,23,34]ary.splice(1,1,100);console.log(ary);    //输出的结果是 [12,100,34]

splice实现增加
splice(n,0,x):在修改的基础上,我们一项都不删除,把x添加到索引n的前面。0表示一项也不删除。

ary.splice(0,0,x) 在数组的开头追加新的内容ary.splice(ary.length,0,x)在数组的末尾追加新的内容。在使用splice进行添加操作的时候,都是将要添加的这一项,添加到数组中某一项的前面。

4、slice 数组查询
进行数组的查询
参数:slice(n,m)从索引为n处查找到索引为m处,但是包含m
返回值:把找到的部分以一个新的数组返回。
原来的数组不变

在这里我们需要注意一下几点:
一、slice(n,m)如果m的值不写,索引n开始找到末尾
二、slice(0)/slice() 这是进行数组的克隆,克隆一份和原来数组一模一样的新数组,但是值得一提的是,虽然是克隆的一个新数组,但是克隆这个新数组和原来数组是不相同的,因为数组属于对象数据类型,两个数组的引用地址不同。
三、slice支持负数索引,如果传递索引为负数,浏览器在解析的时候,按照数组的长度加上负数索引。

5、concat
concat()进行数组的拼接
参数:要拼接的内容,把内容放在原数组的后面,可以是一个数组也可以是一些数据,在进行多个数据拼接的时候要用逗号 隔开。
返回值:是拼接后的数组
原有的数组不发生改变。。。

在这里需要注意的一点是 concat()什么也不拼接,就相当于把原有数组克隆一模一样的新数组出来,克隆出来的新数组和原来的数组是不一样的,同样是因为引用地址不同。

6、toString / join
join()把数组按照指定的分隔符转换为字符串和字符串中的split相对应。
参数:指定的连接符
返回值:转换后的字符串
原有的数组不变

利用joinvar total = eval(ary.join('+'));evel :把字符串变为JS表达式执行。

toString() 实现把数组转换成字符串(转换成以逗号分隔每一项)
参数:无
返回值:转换的字符串
原有的数组不变

7、reverse()
reverse()把数组中的每一项倒过来排列
参数:无
返回值:排序后的数组
原有数组不变
8、 sort()
sort()实现数组的排序
参数:无或者回调函数
返回值:排序后的数组
原有数组发生了改变,变为了新数组。

在这里我们应该注意的是:在不传参的情况下,可以给10以内的数字进行升序排列,但是超过10就无法处理了(多位数只识别第一位)

ary.sort(function(a,b){    return a-b;//升序    return b-a;//降序})

9、indexOf / lastIndexOf 验证数组中是否包含某一项
获取当前项在数组中第一次或者最后一次出现位置的索引。

在这里值得注意的是,第一:数组中的indexOf和lastIndexOf在IE6~8中是不兼容的。第二:字符串中的这两个方法兼容所有的浏览器。

如果当前数组中不存在这一样,返回的是-1,我们根据这一点可以验证数组中是否包含了这一项。

var if(ary.indexOf(12)>-1){    // =>数组中包含12.}

验证数组中的是否包含某一项

Array.prototype,myIndexOf = function myIndexOf(value){    var result =-1;    for(var i=0 ;i<this.length; i++){        if(value===this[i]){            result = i;            break;        }    }    return result;}

10、forEach()
遍历数组中的每一项

ary.forEach(function(value,index){    //数组中有多少项,当前回调函数执行多少次;每一次传递进来的value就是当前遍历数组这一项的值,index就是遍历这一项的索引。    return xxx;})

以上就是我为大家总结的关于数组中常用的几种方法,希望可以帮到大家。