数组初始化

我们都知道,数组是用于保存多个值的集合,在数组中,值被称为元素,值可以是任意的数据类型。在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

数组遍历

数组的遍历有四种方式,分别是forwhiledo-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学习笔记(六)--数组相关推荐

  1. JavaScript学习笔记之数组(二)

    JavaScript学习笔记之数组(二) 1.['1','2','3'].map(parseInt) 输出什么,为什么? ['1','2','3'].map(parseInt)//[1,NaN,NaN ...

  2. JavaScript学习笔记:数组reduce()和reduceRight()方法

    很多时候需要累加数组项的得到一个值(比如说求和).如果你碰到一个类似的问题,你想到的方法是什么呢?会不会和我一样,想到的就是使用for或while循环,对数组进行迭代,依次将他们的值加起来.比如: v ...

  3. JavaScript学习笔记:数组

    文章目录 一.一维数组 1.创建数组 (1)创建空数组,逐个赋值 (2)创建数组同时赋值 (3)创建字面量数组 2.添加数组元素 3.数组长度属性length 4.遍历数组 (1)传统for循环 (2 ...

  4. JavaScript学习笔记之 数组方法一 堆栈 和队列

    数组的方法 以及 堆栈的操作的方法 JavaScript是一种弱类型语言,不像其它程序语言需要严格定义数据类型.在JavaScript中数组可以任意修改变动,这样也就出现了一个问题,如果边遍历数组边操 ...

  5. JavaScript学习笔记(六)(Jquery入门)

    JavaScript学习笔记(六) 一.jQuery是什么? 二.jQuery的安装 三.载入事件区别 四.jQuery对象和DOM对象的区别 DOM对象和Jquery对象互转 五.选择器 5.1 j ...

  6. JavaScript学习(六十六)—字符串对象常用的属性和方法总结以及数组元素的排序问题

    JavaScript学习(六十六)-字符串对象常用的属性和方法总结以及数组元素的排序问题 学习内容 一.数组去重问题 二.二维数组的定义 三.二维数组的元素操作 四.二维数组的遍历 五.关联数组 六. ...

  7. JavaScript学习(六十五)—数组知识点总结

    JavaScript学习(六十五)-数组 学习内容 一.什么是数组 二.数组的分类 三.数组的创建方式 四.数组元素 五.数组的操作 六.数组元素遍历的四种方法 七.随机数为数组赋值 八.数组的比较 ...

  8. JS学习笔记六:js中的DOM操作

    1. JS学习笔记六:js中的DOM操作 文章目录 1. JS学习笔记六:js中的DOM操作 1.1. 获取Dom节点 1.2. 元素属性的操作方式 1.3. DOM节点的创建.插入和删除 1.4. ...

  9. JavaScript学习笔记03-数组-Data对象-Math对象-包装类-字符串-正则

    目录 一.数组 索引 数组的特点 1.1.数组的创建 1.1.1.使用new关键字(构造函数) 1.1.2.使用字面量形式 1.1.3.创建数组的注意事项 1.2.数组的基本使用 1.2.1.存操作( ...

最新文章

  1. PHP curl 实现RESTful PUT DELETE 实例
  2. JAVA实验报告九异常处理_Java课后练习9(异常处理)
  3. python中的range_python中range()与xrange()用法分析
  4. 今天梦幻诛仙服务器维护多久,《梦幻诛仙》6月10日体验服务器维护公告
  5. 解决:flask-sqlalchemy.exc.DataError: (pymysql.err.DataError) (1406数据库字段超出长度错误)
  6. C++简易复数类的实现
  7. (10)Redis------必须知道的基础内容
  8. JAVA实现UDP单播组播
  9. 无法创建视频捕捉过滤器的解决办法
  10. 根据经纬度获取地理位置
  11. css 横向、纵向滚动条
  12. SDNUOJ 1703.字谜|STL库中map的使用/map映射
  13. 条纹噪声图片_一种红外图像条纹噪声滤波方法与流程
  14. 2020美赛数学建模 校级培训——Week_3
  15. 计算机应用教学方法与手段,计算机应用中Office办公软件的教学方法
  16. H5版俄罗斯方块(5)---需求演进和产品迭代
  17. HaaS100硬件规格
  18. opencv 双目摄像头标定
  19. 私有化部署|短视频|带直播|即时通讯|IM|聊天app|支持二开丨视频会议丨支付红包
  20. 安装ubuntu时如何合理为各区间分配磁盘空间?

热门文章

  1. 计算机硬件专业知识西瓜视频,2019年中电脑硬件榜单,空调西瓜+电脑助你当个快乐肥宅...
  2. 服务器消除报警信息,巧妙设置让故障服务器自动报警的小技巧
  3. android安全补丁卸载,这种安全更新能不卸载就不卸载
  4. Windows support for hard disks that are larger than 2 TB
  5. avue里面的select怎么设置默认值_mysql大量的waiting for table level lock怎么办
  6. P2962 [USACO09NOV]灯Lights
  7. 再谈布局,栅栏式自适应布局的学习和实现(calc自适应布局)
  8. THINKPHP中使用swoole
  9. Sql Server参数化查询之where in和like实现之xml和DataTable传参
  10. 通用客户端表单验证函数修正版(zz)