数组是JavaScript中的常用类型,本文详述了数组的基本知识以及一些常用的数组方法,并对每种方法进行了详细解释

数组定义

  1. 用字面量直接定义

    1
    var arr=[0,0,0]; //注意,是方括号
  2. 通过new Array();

  • 参数为一个时,表示数组的长度
  • 参数为多个时,则表示数组元素

数组增删

  • arr(arr.length)=0; //在数组最后面添加元素
  • push()/pop(); //在数组最后面增删元素
  • unshift()/shift(); //在数组最前面增删元素

数组迭代

for…in,eg:for(i in arr){}

  • 遍历数组
  • 会把数组原型链上的元素一同遍历出来
  • 是无序遍历

二维数组

定义:
var arr=[[0,1],[0,1]]

稀疏数组

并不含有从0开始的连续索引,一般数组的length会比实际元素个数大。不连续的索引返回undefined,可利用此判读。

数组方法

数组原型链上提供了大量方法

Array.prototype.join()

  • 将数组转为字符串,同时将传入字符串插入每个元素中间,可通过此方法将字符串重复
1
2
3
4
5
function reapeatString(str,n)
{
return new Array(n+1).join(str);
}
reapeatString(hi,3); //hihihi

Array.prototype.reverse()

  • 将数组逆序,直接修改数组

Array.prototype.sort()

  • 将数组排序,默认按字母升序排列,直接修改数组
  • 可按自定义规则排序,传入比较函数
1
2
3
arr.sort(function(a,b){
return a-b;
})

按正常数值相减的正负返回,是升序排列;按正常数值相减的正负符合取反,是降序排列.
传入的a,b可以是对象或数组(但都是某个数组的元素),相减时再具体到数组的第几个数值或对象的哪个属性,最后会按结果对包含数组排序

Array.prototype.concat()

  • 合并数组,不直接修改原数组,需通过返回值才能拿到结果
    • 若传入参数是一维数组,会被拉平
    • 若传入参数是二维数组,,会拉平最外第一维,元素数组格式不变
 function reapeatString(str,n)
{
return new Array(n+).join(str);
}
reapeatString(hi,); //hihihi

获取部分数组,arr[n]到arr[m-1],即左闭右开Array.prototype.slice(n,m)

  • Array.prototype.slice(n),从arr[n]到最后,包含最后的所有元素
  • 若参数为负值,则表示由后往前的索引值,最后一个元素为-1

Array.prototype.splice()

  • 删除和添加部分数组,对原数组直接修改
  • 传入参数:
    • 第一个:索引
    • 第二个:删除个数 (可无)
    • 后面:将添加的数组,在索引处添加 (可无)

Array.prototype.forEach(function(x,index,a){})

  • 遍历数组,对每个元素调用回调函数
  • 回调函数可传入三个参数:元素的值,元素的索引,数组本身

E5S的新方法,IE9及以上支持,接下来都是

Array.prototype.map(function(x,index,a){})

  • 数组映射,对每个元素按函数里的映射方式进行映射,不直接修改原数组

Array.prototype.filter(function(x,index,a){})

  • 数组过滤,按回调函数返回值的真假,过滤掉为真的元素,不直接修改原数组,通过返回值拿结果

Array.prototype.every(function(x,index,a){})

  • 数组判断,每一个元素,回调函数都返回真时,返回真。发现有不满足的元素,就不继续遍历了

Array.prototype.some(function(x,index,a){})

  • 数组判断,存在元素,回调函数返回真时,返回真。发现有满足的元素,就不继续遍历了

Array.prototype.reduce(function(x,y){})

  • 数组元素累加,对数组元素逐个进行操作,每次操作的结果将用于下一次操作
  • 回调函数传入参数
    • 第一个:上次回调函数的返回值,第一次时为数组第一个元素
    • 第二个:这次将操作的数组元素,第一次时为数组第二个元素

Array.prototype.indexOf(要查找的元素,开始查找的位置)

  • 查找元素
  • 返回值:首个被找到的元素在数组中的索引位置; 若没有找到则返回 -1

Array.isArray(所要检查的对象)

    • 检查对象是否为数组,是返回true,否则false
    • 为构造器上的方法

JavaScript——数组的更多相关文章

  1. Javascript数组操作

    使用JS也算有段时日,然对于数组的使用,总局限于很初级水平,且每每使用总要查下API,或者写个小Demo测试下才算放心,一来二去,浪费不少时间:思虑下,堪能如此继续之?当狠心深学下方是正道. 原文链接 ...

  2. Javascript数组操作(转)

    1.数组的创建 var arrayObj = new Array(); //创建一个数组 var arrayObj = new Array([size]); //创建一个数组并指定长度,注意不是上限, ...

  3. JavaScript 数组

    JavaScript 数组 简介:数组是值的有序集合,JavaScript在同一个数组中可以存放多种类型的元素,而且是长度也是可以动态调整的,可以随着数据增加或减少自动对数组长度做更改. 一:创建数组 ...

  4. 也谈面试必备问题之 JavaScript 数组去重

    Why underscore (觉得这部分眼熟的可以直接跳到下一段了...) 最近开始看 underscore.js 源码,并将 underscore.js 源码解读 放在了我的 2016 计划中. ...

  5. js 判断数组包含某值的方法 和 javascript数组扩展indexOf()方法

    var  questionId = []; var anSwerIdValue = []; ////javascript数组扩展indexOf()方法 Array.prototype.indexOf ...

  6. JavaScript 数组 length 属性获取数组长度或设置数组元素的数目

    JavaScript 数组 length 属性 JavaScript 数组 length 属性可返回或设置或组中元素的数目,语法如下: array_object.length 利用 length 属性 ...

  7. 【读书笔记】-- JavaScript数组

    数组是一段线性分配的内存,它通过整数计算偏移并访问其中的元素.大多数的语言都会要求一个数组的元素是相同类型,但JavaScript数组可以包含任意类型. var misc = ['string', n ...

  8. 什么才是正确的javascript数组检测方式

    前面的话 对于确定某个对象是不是数组,一直是数组的一个经典问题.本文专门将该问题择出来,介绍什么才是正确的javascript数组检测方式 typeof 首先,使用最常用的类型检测工具——typeof ...

  9. javascript数组对象排序

    javascript数组对象排序 JavaScript数组内置排序函数 javascript内置的sort函数是多种排序算法的集合 JavaScript实现多维数组.对象数组排序,其实用的就是原生的s ...

  10. javascript数组的知识点讲解

    javascript数组的知识点讲解 阅读目录 数组的基本方法如下 concat() join() pop() push() reverse() shift() sort() splice() toS ...

随机推荐

  1. PAT A1033 To Fill or Not to Fill (25 分)——贪心

    With highways available, driving a car from Hangzhou to any other city is easy. But since the tank c ...

  2. PAT A1029 Median (25 分)——队列

    Given an increasing sequence S of N integers, the median is the number at the middle position. For e ...

  3. linux笔记 - 配置与编译

    linux内核下载地址:https://www.kernel.org/ ubuntu下载内核对应源码: sudo apt-get source linux-$(uname -r) #此命令下载的源码存 ...

  4. 苹果与Windows双系统时间不同步的解决办法

    步骤:打开C盘>Windows>System32,找到cmd.exe,右键以管理员的身份运行. Reg add HKLM\SYSTEM\CurrentControlSet\Control\ ...

  5. Vue-初步了解vue-router的三要素:路由map 、路由视图、路由导航

    安装vue-router模块 使用vue-router前要先安装vue-router库 cnpm install vue-router –save 使用vue-router vue-router有三个 ...

  6. VB6 加密解密字符串

    Public Function EnCodeStr(ByVal password As String) As String Dim il_bit, il_x, il_y, il_z, il_len, ...

  7. Luogu P2279 [HNOI2003]消防局的设立

    这真的是一道SB题.去你的树形DP 我们看到题目就开始考虑贪心,怎么搞? 一个显然的思路,每次找出一个深度最大且未被覆盖的点,然后建一个消防局? 但这样的话,动用简单的人类思维就可以知道:我TM的还不 ...

  8. 机器学习 第五篇:分类(kNN)

    K最近邻(kNN,k-NearestNeighbor)算法是一种监督式的分类方法,但是,它并不存在单独的训练过程,在分类方法中属于惰性学习法,也就是说,当给定一个训练数据集时,惰性学习法简单地存储或稍 ...

  9. MySQL高可用方案MHA在线切换的步骤及原理

    在日常工作中,会碰到如下的场景,如mysql数据库升级,主服务器硬件升级等,这个时候就需要将写操作切换到另外一台服务器上,那么如何进行在线切换呢?同时,要求切换过程短,对业务的影响比较小. MHA就提 ...

  10. Express4.x API (三):Response (译)

    Express4.x API 译文 系列文章 Express4.x API (一):application (译) -- 完成 Express4.x API (二):request (译) -- 完成 ...