当前位置:首页 > 日记 > 正文

JavaScript原生数组Array常用方法

JavaScript原生数组Array常用方法

栈方法

push方法和pop方法, 可以使数组的行为类似于栈, 先进后出, 并且推入和弹出操作只发生在一端.

push方法

push方法可以接收一个或多个参数, 把它们追加到数组末尾, 并返回修改后数组的长度.

var arr = ['a', 'b', 'c', 'd', 'e'];var temp = arr.push('f');console.info('temp: ' + temp); // temp: 6console.info(arr); // ["a", "b", "c", "d", "e", "f"]temp = arr.push('g', 'h');console.info('temp: ' + temp); // temp: 8console.info(arr); // ["a", "b", "c", "d", "e", "f", "g", "h"]

合并两个数组

我们可以通过Array.prototype.push.apply()来合并两个数组, 示例如下:

var arr1 = ['a', 'b', 'c'],  arr2 = ['x', 'y', 'z'];var temp = Array.prototype.push.apply(arr1, arr2);console.info(arr1); // ["a", "b", "c", "x", "y", "z"]console.info(arr2); // ["x", "y", "z"]console.info(temp); // 6

pop方法

pop方法是将数组的最后一项移除, 将数组长度减1, 并返回移除的项.

var arr = ['a', 'b', 'c', 'd', 'e'];var temp = arr.pop();console.info('temp: ' + temp); // temp: econsole.info('length: ' + arr.length); // length: 4

如果在一个空数组上使用pop方法, 则返回undefined

队列方法

队列的访问规则是先进先出, 并且队尾添加项, 队头移除项. push方法和shift方法结合使用, 就可以像操作队列一样操作数组.

shift方法

shift方法将移除数组的第一项, 将数组长度减1, 并返回移除的项.

var arr = ['a', 'b', 'c', 'd', 'e'];var temp = arr.shift();console.info('temp: ' + temp); // temp: aconsole.info('length: ' + arr.length); // length: 4

unshift方法

相反地, 还有一个unshift方法, 它的用途与shift方法相反
unshift也可以在接收一个或多个参数, 把它们依次添加到数组的前端, 并返回修改后数组的长度.

var arr = ['a', 'b', 'c', 'd', 'e'];var temp = arr.unshift('x', 'y', 'z');console.info('temp: ' + temp); // temp: 8console.info(arr); // ["x", "y", "z", "a", "b", "c", "d", "e"]

重排序方法

sort方法和reverse方法

sort方法和reverse方法是可以直接用来重排序的两个方法.
其中, reverse方法是用来反转数组的.

var arr = [1, 3, 2, 5, 4];arr.reverse();console.info(arr); // [4, 5, 2, 3, 1]

关于sort方法, 默认情况下, 它是对数组的每一项进行升序排列, 即最小的值在前面. 但sort方法会调用toString方法将每一项转成字符串进行比较(字符串通过Unicode位点进行排序), 那么这种比较方案在多数情况下并不是最佳方案. 例如:

var arr = [1, 3, 2, 5, 4];arr.sort();console.info(arr); // [1, 2, 3, 4, 5]arr = [1, 5, 10, 20, 25, 30];arr.sort();console.info(arr); // [1, 10, 20, 25, 30, 5]

因此, sort方法可以接收一个比较函数作为参数, 由我们来决定排序的规则. 比较函数接收两个参数, 如果第一个参数小于第二个参数(即第一个参数应在第二个参数之前)则返回一个负数, 如果两个参数相等则返回0, 如果第一个参数大于第二个参数则返回一个正数, 例如:

var arr = [1, 5, 10, 20, 25, 30];arr.sort(function(value1, value2){  if(value1 < value2) {    return -1;  } else if(value1 > value2) {    return 1;  } else {    return 0;  }});console.info(arr); // [1, 5, 10, 20, 25, 30]

操作方法

concat方法

concat方法可以将多个数组合并成一个新的数组. concat可以接收的参数可以是数组, 也可以是非数组值.

var arr1 = ['a', 'b', 'c'],  arr2 = ['x', 'y', 'z'],  val = 'hello';var temp = arr1.concat(val, arr2);console.info('arr1: ' + arr1); // arr1: a,b,cconsole.info('arr2: ' + arr2); // arr2: x,y,zconsole.info('val: ' + val); // val: helloconsole.info('temp: ' + temp); // temp: a,b,c,hello,x,y,z

concat方法并不操作原数组, 而是新创建一个数组, 然后将调用它的对象中的每一项以及参数中的每一项或非数组参数依次放入新数组中, 并且返回这个新数组.

concat方法并不操作调用它的数组本身, 也不操作各参数数组, 而是将它们的每个元素拷贝一份放到新创建的数组中. 而拷贝的过程, 对于对象类型来说, 是将对象引用复制一份放到新数组中, 而对于基本类型来说, 是将其值放到新数组中.

slice方法

slice方法可以基于源数组中的部分元素, 对其进行浅拷贝, 返回包括从开始到结束(不包括结束位置)位置的元素的新数组.

var arr = ['a', 'b', 'c', 'd', 'e'];var temp1 = arr.slice(),  temp2 = arr.slice(1),  temp3 = arr.slice(1, 2);console.info(arr); // ["a", "b", "c", "d", "e"]console.info(temp1); // ["a", "b", "c", "d", "e"]console.info(temp2); // ["b", "c", "d", "e"]console.info(temp3); // ["b"]

从示例中可以看出:

  1. slice方法并没有操作原数组, 而是创建了一个新的数组.
  2. 当没有传参数给slice方法时, 则返回从索引0开始拷贝的新数组.
  3. 传入一个参数, 如: arr.slice(1), 表示从索引1位置开始拷贝, 一直到原数组的最后一个元素.
  4. 传入两个参数, 如: arr.slice(1, 2), 表示从索引1位置开始拷贝, 一直拷贝到位置2但不包括位置2上的元素.

参数如果为负数, 表示从数组最后面的元素可以算起.

slice方法同样不操作调用它的数组本身, 而是将原数组的每个元素拷贝一份放到新创建的数组中. 而拷贝的过程, 也于concat方法相同.

splice方法

splice方法可以用途删除或修改数组元素. 它有如下几种用法:

删除:
当给splice方法中传入一个或两个参数时, 就可以从数组中删除任意元素.
传入一个参数: 要删除的的第一个元素的位置, 此时将会删除从要删除的第一个元素的位置起, 后面的所有元素.
传入两个参数: 要删除的第一个元素的位置和要删除的项数,
返回值均为删除的元素组成的数组, 例如:

var arr = ['a', 'b', 'c', 'd', 'e'];var temp = arr.splice(2);console.info(arr); // ["a", "b"]console.info(temp); // ["c", "d", "e"]arr = ['a', 'b', 'c', 'd', 'e'];temp = arr.splice(2, 2);console.info(arr); // ["a", "b", "e"]console.info(temp); // ["c", "d"]

插入:
使用splice方法可以向数组的指定位置插入任务数量的元素, 此时需要提供三个参数: 起始位置(要插入的位置), 0(表示要删除的项数, 0为不删除), 要插入的元素, 如果要插入多个元素可以添加更多的参数, 例如:

var arr = ['a', 'b', 'c', 'd', 'e'];var temp = arr.splice(2, 0, 'x', 'y', 'z');console.info(arr); // ["a", "b", "x", "y", "z", "c", "d", "e"]console.info(temp); // [], 并没有删除元素

替换:
当splice接收三个参数, 且第二个参数不为0时, 可达到在数组中替换元素的效果. 例如:

var arr = ['a', 'b', 'c', 'd', 'e'];var temp = arr.splice(2, 2, 'x', 'y', 'z');console.info(arr); // ["a", "b", "x", "y", "z", "e"]console.info(temp); // ["c", "d"]

此示例表示, 从arr数组的位置为2的元素起, 删除2个元素, 并在位置2添加三个元素.
如果移除的元素个数不等于添加的元素个数, 那么数组的长度将发生变化.

另外,
从ECMAScript5开始, 还提供了数组的迭代方法, 归并方法等, 这些方法将在后面做出补充.

相关文章

PS怎么抠掉人物照片中的多余人员

PS怎么抠掉人物照片中的多余人员

片中,多余,人物,人员,花丛,  在素材图片中要消除的部分比较多,有多个人物和其他杂物;修复的时候先把地平线区域修复好,然后再修复天空和地面的区域,这样修复的效果就自然真实很多。以下是小编为您带来的关于PS抠掉户外花丛人物照片中的多余…

怎么在word中设计一款新颖的圆形头

怎么在word中设计一款新颖的圆形头

圆形头像,新颖,电脑软件,word,  平时的微信头像太平淡,怎么能新颖点呢?有人说可以使用PS软件来设计头像,可是不熟悉的人就不会了。其实可以用Word来做,Word也可以设计圆形头像。以下是小编为您带来的关于word中设计一款新颖的圆形头像,希望对…

word2013文档制作标题折叠的方法是

word2013文档制作标题折叠的方法是

折叠,方法,文档,标题,电脑软件,  word2013中有一项非常有趣的功能,就是折叠标题,顾名思义:标题下面的文字能都折叠起来。以下是小编为您带来的关于word2013文档制作标题折叠的方法,希望对您有所帮助。word2013文档制作标题折叠的方法1、首先,…

简单谈谈原生js的math对象

简单谈谈原生js的math对象

对象,原生,简单,电脑软件,js,Math对象方法//返回最大值 var max=Math.max(95,93,90,94,98); console.log(max); //返回最小值 var min=Math.min(95,93,90,94,98); console.log(min); //向上取整 console.log…

使用Math.max,Math.min获取数组中

使用Math.max,Math.min获取数组中

组中,实例,电脑软件,Math,max,Math.min()和Math.max()用法相似。两个方法用来获取给定的一组数值中的最大值或最小值,但是却不接受数组作为参数。当然可以写个函数遍历比较之类的等等,此处不描述。有两个快捷的方法可以接受数组类型参数:1 . M…

Word 2016中如何更改文档默认保存

Word 2016中如何更改文档默认保存

路径,文档,默认,方法,格式,  在默认情况下,Office 2016均使用默认的文档格式和路径来保存文档,用户可以根据需要更改默认的文档保存格式,并将文档默认的保存位置更改为其他的文件夹。以下是小编为您带来的关于Word 2016中更改文档默认保存格…

利用NPM淘宝的node.js镜像加速nvm

利用NPM淘宝的node.js镜像加速nvm

镜像,淘宝,电脑软件,NPM,node,NVM 加速安装 Node.js 一般都是用 nvm但是安装之后使用体验就不咋地了,由于某些不可变原因,国内网络就不好吐槽了;就连执行一下 nvm ls-remote 都要很久。当然“道”高一尺“魔”高一丈,聪明的国人肯定也想出了对…

Word中进行制作通用公文页面的操作

Word中进行制作通用公文页面的操作

通用,操作方法,公文,页面,操作步骤,  公文都有一定有格式,而且格式很严格。公文一般由眉首、主体和版记三部分组成;置于公文红线以上的部分各要素我们统称为眉首。今天,小编就教大家在Word中进行制作通用公文页面的操作方法。Word中进行制…

JS获取浮动 | float元素的style.le

JS获取浮动 | float元素的style.le

浮动,元素,解决办法,值为,快速,解决办法:1.使用行内样式设置元素的top和left值;2.or直接获取元素的offsetLeft得到相关数值,还不需要parseInt问题原因:如果父div的position定义为relative,子div的position定义为absolute,那么子div的style.l…

微信和qq空间如何同步同步微信和qq

微信和qq空间如何同步同步微信和qq

空间,同步,方法,步骤,电脑软件,  在微信和qq空间里发表一样的动态,设置同步可以方便很多。具体的设置方法是怎样的呢?下面就让小编告诉大家同步微信和qq空间的步骤方法。微信和qq空间同步的方法1.进入微信朋友圈同步微信和qq空间的步骤1 …

浅谈原生JS实现jQuery的animate |

浅谈原生JS实现jQuery的animate |

动画,原生,浅谈,示例,电脑软件,本文介绍了浅谈原生JS实现jQuery的animate()动画示例,希望此文章对各位有所帮助。参数介绍:obj 执行动画的元素 css JSON数值对,形式为“{属性名: 属性值}",指要执行动画的书序及…

wps演示怎么插入页面编码

wps演示怎么插入页面编码

方法,编码,演示,页码,页面,  在使用WPS演示制作幻灯片时,有时需要在幻灯片里插入页码,那么怎么在幻灯片里插入页码呢?具体的炒作方法下面小编教你怎么做吧,欢迎大家来到学习wps演示插入页码的方法。wps演示插入页码的方法首先在电脑上打开wp…