JavaScript学习笔记(六)--数组
数组初始化
我们都知道,数组是用于保存多个值的集合,在数组中,值被称为元素,值可以是任意的数据类型。在Javascript中,创建数组通常有两种方式:字面量和构造函数。
- 字面量
数组的元素可以是任意的数据类型,也可以是函数。
var arr = [];
var arr = [8,1,3];
var arr = [[8,1,3],[2,3,4]];
var arr = [true,function()];
- 构造函数
可以使用Object系统内置的Array对象构造函数,也可以使用自定义构造函数。
var arr = new Array(); //[]
var arr = new Array(5); //[ <5 empty items> ]
var arr = new Array("a"); //[ 'a' ]
var arr = new Array(2,3,4); //[ 2, 3, 4 ]
Array.of(5); //[ 5 ]
Array.of(2,2); //[ 2,2 ]
需要注意的是,new Array(5)是指创建了一个含有五个元素的数组,而Array.of(5) 是将参数中的值(5)作为数组的元素。
元素访问
通过索引来访问元素:对象[索引]
,索引从0开始。数组的长度通过length属性来获取,length可读可写。
var arr = [1,2,3];
arr[0]; //1
arr.length; //3
arr[100]; // undefined
数组遍历
数组的遍历有四种方式,分别是for、while、do-while以及for-in,这几种循环语句在前面的JavaScript学习笔记(二)–流程控制语句里都分析总结过,这里就不细说了,需要了解的童鞋请自行查看哦~
数组API
api是应用程序编程接口——别人写的代码供我们来调用,使用时要关注api改变的是数组本身,还是在副本上做的改变。
Array.*
- Array.isArray()
判断一个变量是否是数组 - Array.from()
将一个可迭代的对象转换为数组 - Array.of()
将参数中的值作为数组的元素
Array.prototype.*
迭代
参数都是一个回调函数,回调可以接收三个参数,分别为元素( item)、索引(index)、数组(arr)。
方法 | 返回值 | 作用 |
---|---|---|
Array.prototype.forEach() | undefined | 遍历数组对象 |
Array.prototype.every() | boolean | 判断元素是否都满足同一个条件 |
Array.prototype.some() | boolean | 判断是否有元素满足同一个条件 |
Array.prototype.filter() | arr | 返回回调函数返回true的元素的集合 |
Array.prototype.map() | arr | 返回回调函数返回值组成的数组 |
拓展—>模仿forEach写一个myForeach,使其效果与forEach完全相同。
var arr = ["terry","larry","tom"];
arr.forEach(function(item){console.log(item);
});Array.prototype.myForEach = function(handler){for(var i=0;i<this.length;i++){var item = this[i];handler.call(this,item,i);}
}
arr.myForEach(function(item,index){console.log(item);
});
这里引入了闭包的概念:函数内部嵌套函数,内部函数拥有外部函数的变量,内部函数与外部函数的这个变量就组成了闭包。
栈,队列
方法 | 参数 | 返回值 | 作用 |
---|---|---|---|
Array.prototype.push() | 任意值 | 数组长度 | 向数组的末尾追加指定值 |
Array.prototype.pop() | 无 | 删除的栈顶元素 | 删除元素 |
Array.prototype.shift() | 无 | 删除的队列首部元素 | 出队列 |
Array.prototype.unshift() | 任意值 | 插入后数组的长度 | 将指定元素插入到队列的首部 |
排序
- Array.prototype.reverse();
- Array.prototype.sort();
这两种排序方法默认将数组元素转换为字符串,然后进行排序。sort()允许接收一个比较器函数作为参数,比较器函数有两个参数a、b,如果a > b,返回1,升序;如果a > b,返回-1,降序。(详情请查看–>JavaScript算法(实例三)数组排序)。
截取
- slice()
slice()方法有两个参数,begin和end,分别表示开始位置索引和结束位置索引,在截取时不包含end对应的元素。end可以省略,此时截取到最后一位元素。用slice()方法截取数组时,数组的原值不发生改变。
[1,2,3].slice(1); //[2,3]
[1,2,3,4,5,6].slice(1,3); //[2,3]
- splice()
splice()方法有三个参数,begin、num和x,x,…,分别表示开始位置索引、删除的元素个数、插入的元素。x,x,…可以省略,此时splice()方法仅用来删除元素。
[1,2,3,4,5,6].splice(2,2); //[1,2,5,6]
[1,2,3,4,5,6].splice(2,2,9,8); //[1,2,9,8,5,6]
[1,2,3,4,5,6].splice(3,0,9,9,9); //[1,2,3,9,9,9,5,6]
如何克隆一个数组?
1、concat()
使用 concat() 用于连接两个或多个数组。该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。
var arr1 = [1, 2, 3]
var arr2 = arr1.concat()
arr1[0] = 5
console.log(arr2) // [1, 2, 3]
由于concat() 返回的是一个副本,所以改变 arr1 的时候对arr2不会产生影响。
2、slice()
slice()方法表示从一个数组中截取出新的数组,它有两个参数,如果不写参数,那么slice方法可以实现数组的复制。
var arr1 = [1, 2, 3, 4]
var arr2 = arr1.slice()
console.log(arr2) //[1,2,3,4]
arr1 = [4, 3, 2, 1]
console.log(arr2) //[1,2,3,4]
3、… 扩展运算符
var arr1 = [1, 2];
var arr2 = [...arr1]; //[1, 2]
var [...arr2] = arr1; //[1, 2]
4、JSON.stringify
var arr = [1, 2, 3, 4]
var arr1 = JSON.parse(JSON.stringify(arr)) //[1, 2, 3, 4]
5、Object.assign()
var arr = [1,2,3,4]
var arr1 = []
Object.assign(arr1,arr)
arr[0] = 6
console.log(arr) // [6, 2, 3, 4]
console.log(arr1) // [1, 2, 3, 4]
6、自己封装一个myClone函数
Array.prototype.myClone = function(){var newArr=[];for(var i=0;i<this.length;i++) {newArr.push(this[i]);}return newArr;
}
var arr = ['aaa','bbb','ccc']
var arr1 = arr.myClone()
console.log(arr) //["aaa", "bbb", "ccc"]
console.log(arr1) //["aaa", "bbb", "ccc"]
console.log( arr1 === arr ) //false
JavaScript学习笔记(六)--数组相关推荐
- JavaScript学习笔记之数组(二)
JavaScript学习笔记之数组(二) 1.['1','2','3'].map(parseInt) 输出什么,为什么? ['1','2','3'].map(parseInt)//[1,NaN,NaN ...
- JavaScript学习笔记:数组reduce()和reduceRight()方法
很多时候需要累加数组项的得到一个值(比如说求和).如果你碰到一个类似的问题,你想到的方法是什么呢?会不会和我一样,想到的就是使用for或while循环,对数组进行迭代,依次将他们的值加起来.比如: v ...
- JavaScript学习笔记:数组
文章目录 一.一维数组 1.创建数组 (1)创建空数组,逐个赋值 (2)创建数组同时赋值 (3)创建字面量数组 2.添加数组元素 3.数组长度属性length 4.遍历数组 (1)传统for循环 (2 ...
- JavaScript学习笔记之 数组方法一 堆栈 和队列
数组的方法 以及 堆栈的操作的方法 JavaScript是一种弱类型语言,不像其它程序语言需要严格定义数据类型.在JavaScript中数组可以任意修改变动,这样也就出现了一个问题,如果边遍历数组边操 ...
- JavaScript学习笔记(六)(Jquery入门)
JavaScript学习笔记(六) 一.jQuery是什么? 二.jQuery的安装 三.载入事件区别 四.jQuery对象和DOM对象的区别 DOM对象和Jquery对象互转 五.选择器 5.1 j ...
- JavaScript学习(六十六)—字符串对象常用的属性和方法总结以及数组元素的排序问题
JavaScript学习(六十六)-字符串对象常用的属性和方法总结以及数组元素的排序问题 学习内容 一.数组去重问题 二.二维数组的定义 三.二维数组的元素操作 四.二维数组的遍历 五.关联数组 六. ...
- JavaScript学习(六十五)—数组知识点总结
JavaScript学习(六十五)-数组 学习内容 一.什么是数组 二.数组的分类 三.数组的创建方式 四.数组元素 五.数组的操作 六.数组元素遍历的四种方法 七.随机数为数组赋值 八.数组的比较 ...
- JS学习笔记六:js中的DOM操作
1. JS学习笔记六:js中的DOM操作 文章目录 1. JS学习笔记六:js中的DOM操作 1.1. 获取Dom节点 1.2. 元素属性的操作方式 1.3. DOM节点的创建.插入和删除 1.4. ...
- JavaScript学习笔记03-数组-Data对象-Math对象-包装类-字符串-正则
目录 一.数组 索引 数组的特点 1.1.数组的创建 1.1.1.使用new关键字(构造函数) 1.1.2.使用字面量形式 1.1.3.创建数组的注意事项 1.2.数组的基本使用 1.2.1.存操作( ...
最新文章
- PHP curl 实现RESTful PUT DELETE 实例
- JAVA实验报告九异常处理_Java课后练习9(异常处理)
- python中的range_python中range()与xrange()用法分析
- 今天梦幻诛仙服务器维护多久,《梦幻诛仙》6月10日体验服务器维护公告
- 解决:flask-sqlalchemy.exc.DataError: (pymysql.err.DataError) (1406数据库字段超出长度错误)
- C++简易复数类的实现
- (10)Redis------必须知道的基础内容
- JAVA实现UDP单播组播
- 无法创建视频捕捉过滤器的解决办法
- 根据经纬度获取地理位置
- css 横向、纵向滚动条
- SDNUOJ 1703.字谜|STL库中map的使用/map映射
- 条纹噪声图片_一种红外图像条纹噪声滤波方法与流程
- 2020美赛数学建模 校级培训——Week_3
- 计算机应用教学方法与手段,计算机应用中Office办公软件的教学方法
- H5版俄罗斯方块(5)---需求演进和产品迭代
- HaaS100硬件规格
- opencv 双目摄像头标定
- 私有化部署|短视频|带直播|即时通讯|IM|聊天app|支持二开丨视频会议丨支付红包
- 安装ubuntu时如何合理为各区间分配磁盘空间?
热门文章
- 计算机硬件专业知识西瓜视频,2019年中电脑硬件榜单,空调西瓜+电脑助你当个快乐肥宅...
- 服务器消除报警信息,巧妙设置让故障服务器自动报警的小技巧
- android安全补丁卸载,这种安全更新能不卸载就不卸载
- Windows support for hard disks that are larger than 2 TB
- avue里面的select怎么设置默认值_mysql大量的waiting for table level lock怎么办
- P2962 [USACO09NOV]灯Lights
- 再谈布局,栅栏式自适应布局的学习和实现(calc自适应布局)
- THINKPHP中使用swoole
- Sql Server参数化查询之where in和like实现之xml和DataTable传参
- 通用客户端表单验证函数修正版(zz)