JS数组操作之增删改查的简单实现


Posted in Javascript onAugust 21, 2017

JS提供了很多方便操作数组的方法,本文所要分享的就是如何快速对数组进行增、删、改、查。

一、增

1、push()

可接收任意数量的参数,把它们逐个添加至数组末尾,并返回修改后数组的长度。例如:

var arr = [];
var len = arr.push(1);
console.log(arr); // [1]
console.log(len); // 1
len = arr.push(2,3);
console.log(arr); // [1,2,3]
console.log(len); // 3

2、unshift()

该方法与push()类似,也可接收任意数量的参数,只不过是将参数逐个添加至数组前端而已,同样返回新数组长度。咱们接着上面的例子:

var len = arr.unshift(0);
console.log(arr); // [0, 1, 2, 3]
console.log(len); // 4
len = arr.unshift(-2,-1);
console.log(arr);  // [-2, -1, 0, 1, 2, 3]
console.log(len);  // 6

3、concat()

该方法与push()方法有点类似,同样是将元素添加至数组末尾,只不过这个数组已经不是原来的那个数组了,而是其副本,所以concat()操作数组后会返回一个新的数组。具体用法如下:

① 不传参数,返回当前数组副本

② 传递一或多个数组,则该方法会将这些数组中的每一项都添加到结果数组中

③ 传递非数组参数,这些参数就会被直接添加到结果数组的末尾

继续接着上面的栗子:

var arr1 = arr.concat(4,[5,6]);
console.log(arr);  // [-2, -1, 0, 1, 2, 3]
console.log(arr1);  // [-2, -1, 0, 1, 2, 3, 4, 5, 6]

例子中一目了然,原数组保持不变,新数组后面添加了4、5、6三个元素。

4、splice()

前面的三个方法都具有很大局限性,因为不是添加到数组前就是数组后,而splice()就不一样了,它非常灵活和强大。灵活是因为它可以添加元素到数组的任意位置,强大是因为它除了可以添加元素之外还具有删除和替换元素的功能(这个后面会陆续讲到)。

splice()可以向数组指定位置添加任意数量的元素,需要传入至少3个参数: 起始位置、0(要删除的元素个数)和要添加的元素。

依然接着上面的例子继续:

arr.splice(3,0,0.2,0.4,0.6,0.8);
console.log(arr); // [-2, -1, 0, 0.2, 0.4, 0.6, 0.8, 1, 2, 3]

可以看出,splice()与push()和unshift()一样是直接在原数组上修改的。

二、删

1、pop()

与push()方法配合使用可以构成后进先出的栈,该方法可从数组末尾删除最后一项并返回该项。

接着上例:

var item = arr.pop();
console.log(item);  // 3
console.log(arr);  // [-2, -1, 0, 0.2, 0.4, 0.6, 0.8, 1, 2]

2、shift()

与push()方法配合使用可以构成先进先出的队列,该方法可删除数组第一项并返回该项。

继续接着上例:

var item = arr.shift();
console.log(item); // -2
console.log(arr); // [-1, 0, 0.2, 0.4, 0.6, 0.8, 1, 2]

3、slice()

该方法同concat()一样是返回一个新数组,不会影响原数组,只不过slice()是用来裁剪数组的,返回裁剪下来的数组,具体用法如下:

slice()方法可以接受一或两个参数,即要返回项的起始和结束位置。在只有一个参数的情况下,slice()方法返回从该参数指定位置开始到当前数组末尾的所有项。如果有两个参数,该方法返回起始和结束位置之间的项——但不包括结束位置的项。

咱们还是继续接着上面例子吧~~

var arr2 = arr.slice(2,6);
console.log(arr); // [-1, 0, 0.2, 0.4, 0.6, 0.8, 1, 2]
console.log(arr2); // [0.2, 0.4, 0.6, 0.8]

4、splice()

好,继续讲这个“万能”的方法。

上面讲到,该方法在添加数组元素的时候需要传入3个以上参数,而其中第2个参数就是用于指定要删除元素的个数的,那时我们传的是数字0。那么,如果单单只需删除元素,我们就只需给splice()传入两个参数,第1个参数用于指定要删除的第一项的位置,第2个参数用于指定要删除元素的个数。

继续上例~~

arr.splice(2,4);
console.log(arr); // [-1, 0, 1, 2]

从索引项为2的位置开始删除4个元素,所以结果为 [-1, 0, 1, 2]。

三、改

这个其实最灵活的方式就是直接使用splice()这个强大的方法了,其实通过以上对该方法的了解,我们大致就能知道使用该方法修改数组元素的基本原理。

原理很简单,就是向指定位置插入任意数量的元素,且同时删除任意数量的元素。

依然继续上例~~

arr.splice(2,1,0.5,1,1.5);
console.log(arr);  // [-1, 0, 0.5, 1, 1.5, 2]

四、查

indexOf()和lastIndexOf()

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

例如:

var index = arr.indexOf(0);
console.log(index);  // 1
index = arr.indexOf(3,0);
console.log(index);  // -1

当找不到该元素时,返回 -1 ,lastIndexOf()方法同理。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js获取div高度的代码
Aug 09 Javascript
16个最流行的JavaScript框架[推荐]
May 29 Javascript
java与javascript之间json格式数据互转介绍
Oct 29 Javascript
24款热门实用的jQuery插件推荐
Dec 24 Javascript
canvas绘制的直线动画
Jan 23 Javascript
jquery仿ps颜色拾取功能
Mar 08 Javascript
webpack vue 项目打包生成的文件,资源文件报404问题的修复方法(总结篇)
Jan 09 Javascript
React 组件间的通信示例
Jun 14 Javascript
vue.js使用v-if实现显示与隐藏功能示例
Jul 06 Javascript
详解使用Nuxt.js快速搭建服务端渲染(SSR)应用
Mar 13 Javascript
vue在index.html中引入静态文件不生效问题及解决方法
Apr 29 Javascript
微信小程序API—获取定位的详解
Apr 30 Javascript
JS实现评价的星星功能
Aug 20 #Javascript
详解A标签中href=""的几种用法
Aug 20 #Javascript
Cropper.js 实现裁剪图片并上传(PC端)
Aug 20 #Javascript
Bootstrap 模态框(Modal)带参数传值实例
Aug 20 #Javascript
mui 打开新窗口的方式总结及注意事项
Aug 20 #Javascript
ES6扩展运算符的用途实例详解
Aug 20 #Javascript
关于JavaScript的单双引号嵌套问题
Aug 20 #Javascript
You might like
超级简单的发送邮件程序
2006/10/09 PHP
探讨fckeditor在Php中的配置详解
2013/06/08 PHP
浅谈php的优缺点
2015/07/14 PHP
PHP程序员不应该忽略的3点
2015/10/09 PHP
PHP多个图片压缩成ZIP的方法
2020/08/18 PHP
fix-ie5.js扩展在IE5下不能使用的几个方法
2007/08/20 Javascript
javascript 建设银行登陆键盘
2008/06/10 Javascript
javascript 获取所有id中包含某关键字的控件的实现代码
2010/11/25 Javascript
IE与Firefox在JavaScript上的7个不同句法分享
2011/10/30 Javascript
js如何判断用户是在PC端和还是移动端访问
2014/04/24 Javascript
解决jquery版本冲突的有效方法
2014/09/02 Javascript
input file上传 图片预览功能实例代码
2016/10/25 Javascript
详解jQuery uploadify文件上传插件的使用方法
2016/12/16 Javascript
jQuery自定义插件详解及实例代码
2016/12/29 Javascript
JavaScript实现的3D旋转魔方动画效果实例代码
2019/07/31 Javascript
弱类型语言javascript开发中的一些坑实例小结【变量、函数、数组、对象、作用域等】
2019/08/07 Javascript
vue+elementUI动态生成面包屑导航教程
2019/11/04 Javascript
vue实现前端分页完整代码
2020/06/17 Javascript
python判断端口是否打开的实现代码
2013/02/10 Python
Python读取图片属性信息的实现方法
2016/09/11 Python
python中in在list和dict中查找效率的对比分析
2018/05/04 Python
对python使用http、https代理的实例讲解
2018/05/07 Python
python 在屏幕上逐字显示一行字的实例
2018/12/24 Python
简单了解python关系(比较)运算符
2019/07/08 Python
浅谈ROC曲线的最佳阈值如何选取
2020/02/28 Python
Python生成器generator原理及用法解析
2020/07/20 Python
Python3 用什么IDE开发工具比较好
2020/11/28 Python
html5 datalist标签使用示例(自动完成组件)
2014/05/04 HTML / CSS
纪伊国屋泰国网上书店:Kinokuniya泰国
2017/12/24 全球购物
C和C++经典笔试题附答案解析
2014/08/18 面试题
SQL注入攻击的种类有哪些
2013/12/30 面试题
Java中采用什么结构来捕获、处理异常?各子句的顺序、功能如何
2013/10/07 面试题
服务员自我评价
2014/01/25 职场文书
数学系毕业生求职信
2014/05/29 职场文书
教师批评与自我批评范文
2014/10/15 职场文书
2016年教师学习教师法心得体会
2016/01/20 职场文书