前端深入之js篇丨Array数组操作从入门到成神Up Up Up,持续更新中
写在前面
随着前端深入的不断学习,发现数组这个数据结构在前端中有着相当大的存在感,由于我初学前端的时候并没有系统性的学习数组,所以我将通过这篇文章同你一起学习数组,希望我们能一起进步,学会熟练操作数组。
数组基本操作
创建数组
var arr1 = []; //通过字面量的方式创建一个没有元素的空数组
var arr2 = new Array(); //通过构造函数的方式创建一个空数组
var arr3 = new Array(5); //创建一个有五个元素的数组,此时每个数组元素为undefined
var arr4 = [1,2,3,4,5]; //创建有五个值的数组
var arr5 = [{id:1,name:'不是酸柠檬'},{id:2,name:'no lemon'}]; //创建一个值为对象的数组
数组创建有两种方式,分别是[]字面量方式、new Array()构造函数方式,本质上创建方式是一致的,使用字面量的方式要比构造函数的方式简单的多,推荐小伙伴们使用。
数组增加删除
push()、pop()、unshift()和shift()
var arr = []; //通过字面量的方式创建一个没有元素的空数组
arr[1] = '不是酸柠檬'; //写入第一个元素 ['不是酸柠檬']
arr.push('22岁'); //在数组末尾添加一个元素 ['不是酸柠檬','22岁']
arr.pop(); //删除数组末尾的元素 ['不是酸柠檬']
arr.unshift('22岁'); //在数组头部添加元素 ['22岁','不是酸柠檬']
arr.shift(); //删除数组头部的元素 ['不是酸柠檬']
这里主要介绍到了最基本的两组增加删除元素的方式,分别是push()在数组末尾添加、pop()删除末尾元素、unshift()在数组头部添加、shift()删除头部元素,这是数组中最常用的四个添加删除方法,小伙伴一定要牢记。
splice()
var arr = [0,1,2,3,4,5,6,7];
arr.splice(4); // 从下标为4的元素一直删除到末尾,此时arr为 [0, 1, 2, 3]
arr.splice(1,2); // 从下标为1的元素开始向后删除两个元素,此时arr为 [0, 3]
arr.splice(1,0,[1,2]); // 从下标为1的元素开始向后删除0个元素,并且插入元素'1,2',此时arr为 [0, 1, 2, 3]
splice()是数组操作中很重要的方法,使用splice()可以更为自由的对数组进行相应的增加删除,通过splice()方法也可以很轻松的实现push()、pop()、unshift()和shift()四个方法,小伙伴们可以自己尝试一下,加强对splice()方法的理解。
delete和arr.length()
var skill = ['Vue','React','ES6'];
delete skill[0]; //将第一个元素设为空,不改变数组长度 [empty,'React','angular']
skill.length = 5; //将数组长度设置为5 [empty,'React','angular',empty,empty]
skill.length = 0; //将数组长度设置为0,此时数组置为空 []
这里应该注意delete和length的区别,使用delete操作后的数组元素会被设置为empty,不会改变原数组长度。使用length操作后,若设置长度大于原数组长度,则新添的元素设置为empty,若设置长度小于原数组长度,则删除多余元素,并改变数组长度,若设置length为0,则清空数组,使数组长度改变为零。
数组方法
join()
var skill = ['Vue','React','angular'];
skill.join(); //"Vue,React,angular"
skill.join('----'); //"Vue----React----angular"
通过arr.join()可以将数组元素拼接成字符串,并在每个元素中添加指定字符,如不设置,则默认添加逗号。
reverse()
var arr = [1,2,3,4,5];
arr.reverse(); //[5,4,3,2,1]
通过arr.reverse()可以将数组中每一个元素调到顺序进行排列。
sort()
var arr = [5,4,3,2,1];
arr.sort(); //[1,2,3,4,5]
var arr1 = ['a','c','e','d','b']
arr1.sort(); ['a','b','c','d','e']
通过arr.sort()可以将数组元素按照顺序进行排列,比如数字先后顺序或者字母排序。但是他并不是按照数字大小顺序来排序的,为了使数组元素能按照数字大小排序,应该按照以下方式来实现。
var arr = [55555,44,3333,222,11111];
arr.sort(); //[11111, 222, 3333, 44, 55555] 按照数字先后顺序,并没有对比大小
arr.sort((a,b)=>{
return a-b; //数字由小到大进行排列 [44, 222, 3333, 11111, 55555]
})
arr.sort((a,b)=>{
return b-a; //数字由大到小进行排列 [55555, 11111, 3333, 222, 44]
})
concat()
var arr = [1,2,3];
arr.concat(4,5); // [1, 2, 3, 4, 5]
arr.concat([4,5]); // [1, 2, 3, 4, 5]
arr.concat([4,5],[6,7]); // [1, 2, 3, 4, 5, 6, 7]
arr.concat(4,[5,[6,7]]); // [1, 2, 3, 4, 5, [6, 7]]
通过arr.concat()可以将字符添加到数组元素中,也可以将其他数组添加到当前数组中,但如果是嵌套数组,concat()默认不会对它进行扁平化处理。
slice()
var arr = [1,2,3,4,5];
arr.slice(0,3); // [1, 2, 3] 从下标为0的元素开始的三个元素
arr.slice(3); // [4, 5] 从下标为3的元素开始到结束的元素
通过arr.slice()可以对数组进行查询,如果传入两个参数(x,y),则意义为从下标x开始,向后数y个元素;如果传入一个参数(x),则意义为从下标x开始一直到末尾的所有元素。
filter()、every()和some()
var arr = [1,2,3,4,5];
var resarr1 = arr.filter((x)=>{
return x>3;
}); // [4, 5] 筛选数组元素大于3的结果
var resarr2 = arr.filter((x)=>{
return x%2==0;
}); // [2, 4] 筛选数组元素中的偶数
通过arr.filter()可以对数组进行带条件的筛选,在filter()里面写入相应条件,这里要注意执行arr.filter()会返回一个数组,我们需要定义一个新数组来接收它。
var arr = [1,2,3,4,5];
arr.every((x)=>{
return x>3;
}); // false arr数组中不是每一项都大于3,返回false
arr.every((x)=>{
return x>0;
}); // false arr数组中每一项都大于0,返回true
arr.some((x)=>{
return x>3;
}); // false arr数组中存在一项大于3,返回true
这一组方法是用来判断数组中有没有相应值的,arr.every()判断的值必须所有都满足条件才会返回true,而arr.some()判断的值只需要有一项满足就会返回true。
reduce()
var arr = [1,2,3,4,5];
var sum = arr.reduce((x,y)=>{
return x+y //0+1+2+3+4+5 =》 15
},0)
var product = arr.reduce((x,y)=>{
return x*y //1*2*3*4*5 => 120
})
var max = arr.reduce((x,y)=>{
return (x>y)?x:y //
})
arr.reduce()方法会对传入的数组元素进行组合,如例子中的x和y,在每个方法中的返回值会注入到x中,然后继续与下一个y值进行操作,所有操作完成后返回最终结果,这个方法有第二个参数用来设置默认值到x,但默认值不是必填项。
为了方便小伙伴理解,我把代码中sum当做例子来进行拆解
- (x=0,y=1) => 0+1=1
- (x=1,y=2) => 1+2=3
- (x=3,y=3) => 3+3=6
- (x=6,y=4) => 6+4=10
- (x=10,y=5) => 10+5=15
- 此时便利完所有数组元素,返回值15
结论
今天我们一起学习了数组操作的常用方法,知识点比较多,也没有太多连贯性,但是这些方法在我们的日常工作中会经常用到,希望你能够多加练习,深入理解这些方法,你的前端水平一定会更上一层楼的。
关于数组的操作方法还有很多没有写到,这篇文章将会持续更新,有需要的小伙伴可以点赞收藏,在我更新之后就可以及时来阅读学习啦!
结语
以上就是本文章的全部内容了,如果有不正确的地方欢迎指正。
感谢您的阅读,如果感觉有用不妨点赞/转发。
前端深入系列是一个踩坑系列,是由我本人对工作和学习中所遇到的问题和踩过的坑的一个探索与总结,在此记录分享出去,同时也是对自我技能的一个反思和追问。
前端路漫,踩坑不断。
前端深入系列持续更新中……
以上2019-11-04。
前端深入之js篇丨Array数组操作从入门到成神Up Up Up,持续更新中的更多相关文章
- 【前端】Util.js-ES6实现的常用100多个javaScript简短函数封装合集(持续更新中)
Util.js (持续更新中...) 项目地址: https://github.com/dragonir/Util.js 项目描述 Util.js 是对常用函数的封装,方便在实际项目中使用,主要内容包 ...
- 前端深入之css篇丨2020年前,彻底掌握css动画【animation】
写在前面 马上就2020年了,不知道小伙伴们今年学习了css3动画了吗? 说起来css动画是一个很尬的事,一方面因为公司用css动画比较少,另一方面大部分开发者习惯了用JavaScript来做动画,所 ...
- 前端深入之css篇丨初探【transform】,手把手带你实现1024程序员节动画
写在前面 马上就2020年了,不知道小伙伴们今年学习了css3动画了吗? 说起来css动画是一个很尬的事,一方面因为公司用css动画比较少,另一方面大部分开发者习惯了用JavaScript来做动画,所 ...
- 前端深入之css篇丨2020年前,彻底掌握css动画【transition】
写在前面 马上就2020年了,不知道小伙伴们今年学习了css3动画了吗? 说起来css动画是一个很尬的事,一方面因为公司用css动画比较少,另一方面大部分开发者习惯了用JavaScript来做动画,所 ...
- 【前端面试】Vue面试题总结(持续更新中)
Vue面试题总结(持续更新中) 题目参考链接 https://blog.csdn.net/weixin_45257157/article/details/106215158 由于已经有很多前辈深造VU ...
- Python开发【第二十三篇】:持续更新中...
Python开发[第二十三篇]:持续更新中...
- js坑爹笔试题目汇总(持续更新中)
把你的面试官问倒,你就是一个合格的面试者了,以下总结一些易错的js笔试题目,会持续更新中.欢迎关注 1,考察this var length = 10 function fn(){ alert(this ...
- Ext JS学习第十六天 事件机制event(一) DotNet进阶系列(持续更新) 第一节:.Net版基于WebSocket的聊天室样例 第十五节:深入理解async和await的作用及各种适用场景和用法 第十五节:深入理解async和await的作用及各种适用场景和用法 前端自动化准备和详细配置(NVM、NPM/CNPM、NodeJs、NRM、WebPack、Gulp/Grunt、G
code&monkey Ext JS学习第十六天 事件机制event(一) 此文用来记录学习笔记: 休息了好几天,从今天开始继续保持更新,鞭策自己学习 今天我们来说一说什么是事件,对于事件 ...
- 107个JS常用方法(持续更新中)
1.输出语句:document.write(""); 2.JS中的注释为//3.传统的HTML文档顺序是:document->html->(head,body)4.一个 ...
随机推荐
- hdu 4725 The Shortest Path in Nya Graph (最短路+建图)
The Shortest Path in Nya Graph Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ...
- 网络编程基础之socket套接字编程实现同一IP下的信息传输
鲁照山 1.网络协议的5层模型,每层内容的整理 2.画图描述三次握手四次挥手,和C端S端的状态 3.写一个客户端,实现给服务端发送hello world 字符串, 写一个服务端,将客户端发送的数据变成 ...
- Http协议 & Servlet
Http协议&Servlet Http协议 什么是协议 双方在交互.通讯的时候遵守的一种规范.规则. http协议 针对网络上的客户端与服务器端在执行http请求的时候,遵守的一种规范.其实就 ...
- JSON在线解析及格式化校验工具 jsonin.com
JSON在线解析及格式化校验工具 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它使得人们很容易的进行阅读和编写.同时也方便了机器进行解析和生成.它是基 ...
- 京东云携手HashiCorp,宣布推出Terraform Provider
2019年4月23日消息,京东云携手云基础设施自动化软件的领导者HashiCorp,宣布推出Terraform Provider for JD Cloud,这意味着用户能够在京东云上轻松使用简单模板语 ...
- 商业分析BA:用户故事怎么拆?
什么是User Story其实我觉得要对User Story做一个定义还是挺难的.曾经的我以为,所谓User Story是User来讲述的Story.你看啊,User Story的编写范式:As a ...
- Linux上用IP转发使内部网络连接互联网
IP转发的概念: 使 Linux 机器像路由器一样将数据从一个网络发送到另一个网络.所以,它能作为一个路由器或者代理服务器,实现将一个连接的互联网或者网络连接共享给多个客户端机器. 1. 启用 IPv ...
- flask项目统一捕获异常并自定义异常信息
背景: 在日常编写了一些flask项目,主要用于测试方面的mock场景,但迭代到后期发现有时候会抛出各种乱七八糟的异常或者直接500且没有任何异常信息,这种情况一般都是某个代码块没有用try ...
- 安装SDK 6.0(二)
2==>安装SDK 6.0 打开安卓Android Studio 出现 Unable to access Android SDK add-on list 点击 Cancal 在点击Cancel ...
- 代码管理平台之svn
yum install -y subversion(server和client均安装subversion) configure svn:[root@node01 ~]# mkdir -p /data/ ...