重操JS旧业第三弹:Array

时间:2023-02-26 08:52:11

数组在任何编程语言中都是非常重要的,因为函数在最大程度上代表了要实现的功能,而数组则是这些函数所要操作的内存一部分。

1 构建数组

js与其他非脚本语言的灵活之处在于要实现一个目标它可能具有多种方式,如数组的定义有2中,对象的定义一般也有2中,而类却又多种,花样很多,目的呢都是为了节省内存,适合不同应用场景

1)使用构造函数

var arr=new Array();

2)使用字面量

var arr=[];

2 检测数组类型

在前面我们已经有了非引用的typeof,其应用于所有类型,属于广谱类型检测,再则就是instanceof属于对象类型检测,局部类型检测,也有特殊的检测如isNaN,对于Array而言也可以使用instanceof,

但是对于多框架的页面就可能存在问题(原因我也不知道,书上这样说的,具体还没碰到),所以呢就像isNaN一样采用Array.isArray()函数进行稳妥检测,与isNaN不同的是isArray是属于Array的静态函数

而isNaN则是window的函数

3 转换

数组的toString()方法:其实现过程为调用每个元素的toString()方法然后使用','连接起来得到的字符串,也可以在toString()中使用连接符参数比如:toString('||')

数组的toLocalString()方法:与toString()方法同理

数组的valueof()方法:与toString()方法同理

4 将数组作为栈使用

栈的概念即先进后出 ,后进先出,array提供push,pop两个方法来支持这种数据结构的操作

5 将数组作为队列使用

shift函数:将数组中第一个元素取出,并长度减一,非常简单实现先进先出

unshift函数:反向的向第一个位置插入一个或多个元素,因此可以和pop配合实现反向队列

6 数组排序

数组排序方法sort():数组默认排序原理,先将数组项转换为字符串,再将字符串进行比较,所以这种默认的字符串比较来排序是基本上得不到正确结果的;

数组提供sort和reverse方法,从字面上很好理解2个方法的功能。

sort支持自定义比较,即sort()可以传递一个函数,该函数接收2个形式参数,默认的比较是按照升序排列,即从小到大,那么具体怎么比较呢

重操JS旧业第三弹:Array

如果前面小于后面返回-1,如果相等返回0,在这里接受返回1时前面的value1放后面,即升序情况下谁小谁前面,相应的返回-1

特殊情况:对于数组项全是数值型的可以直接使用相减运算;

重操JS旧业第三弹:Array

7 数组查询

查询数组中存在某项,数组提供indexof和lastindexof;其原理:将要查找的目标与数组项挨个做全等判断,这里比较严格,必须全等,如果找到则返回该项所在的数组下标,没有找到返回-1,相应的lastindexof则从后面向前面反向查找;

8 数组迭代

数组迭代提供类似与c#中lamda表达式对Ilist迭代方法,这些迭代方法的函数表达式均接受3个参数,分别为item,项本身,index项所在的位置下标,array即该数组

即函数为:function(item,index,array){};

every():即每一个函数运行结果均返回true,最终才为true,

every(function(item,index,array){

//一些操作

return true;

})

filter:即返回true哪些项从新组成一个数组;目的就是要过滤哪些项满足条件;

foreach():该函数没有返回值,即每个项只需执行函数即可

map():即每个项运行该函数,将运行的结果组成一个数组作为返回值,相当于对一个数组进行加工得到一个新数组;

some():即每个项运行该函数,任意一个函数返回true,则返回true,相当于只要任意一个数组项满足条件,则意味着该数组就满足条件

9 数组管理

数组管理提供3个高级方法,分别是concat,slice,splice;

concat:用于构建新的数组,接收n个参数,这些参数可以是任意类型,因为数组本身可以存放任意类型,然后组成1个新的数组;

其基本原理:先将数组进行复制一份,如果没有任何参数,则是将原有数组复制一份得到新数组,如果是有参数则将参数在新数组后面依次插入;

重操JS旧业第三弹:Array

slice:该方法用于在原有数组中取出数组项构建新的数组,该方法提供2个参数,即起始位置,和终止位置,如果不传递参数也就是将原有数组复制一份,但是有个特殊之处,slice有2个参数的时候并不会包含终止位置

的数组项;

重操JS旧业第三弹:Array

splice:主要用于向数组中插入元素,附带的可以实现数组的替换,项的删除;该方法提供3个参数:起始位置,删除项数量,插入的项(其实这个地方可以是n个,只是说第三个参数后面可以跟n个参数,但是功能都一样)。splice跟前面concat和slice方法不同的是不会创建新的数组副本而是直接在原有数组基础上操作。

1)删除功能:一般来说只有2个参数情况下

splice(0,2):理解为从0位置开始,删除2个数组项;

2)插入功能:3个以上的参数

splice(2,0,‘red’,‘green’):理解为从下标为2的位置开始,删除0个数组项,插入2个字符串;

3)替换功能:3个参数

splice(2,2,‘red’,‘green’,‘blue’):理解为从下标为2的位置开始,删除2个数组项,然后在插入3个元素

重操JS旧业第三弹:Array

10 数组加工

reduce和reduceRight方法,该2个方法不同点在于顺序相反,reduce是从左自右对数组进行迭代,reduceRight则是从右自左迭代,2个方法可以传递一个可选的函数作为参数;

其中函数有4个参数,function(pre,cur,index,array)

pre:前一次迭代的返回值

cur:当前迭代的数组项值

index:当前迭代的数组项的位置

array:数组本身

重操JS旧业第三弹:Array

js中的数组很强大,高级方法也很多,参数也很灵活,所以也是不太好记住的地方

重操JS旧业第三弹:Array的更多相关文章

  1. 重操JS旧业第十一弹:BOM对象

    BOM对象即浏览器内置对象,现今流行的浏览器内核有Safri,Firefox,Chrome,Opera,IE其中IE的兼容性是最蛋疼的在10及其过后还好点,但是现在IE基本上淘汰,而国内像360这种垃 ...

  2. 重操JS旧业第十弹:闭包

    闭包是js最难理解,也是最蛋疼的一个名词,仿佛只可意会不可言传一样,有人说闭包说白了就是函数嵌套,也有人说闭包就是函数能够访问函数外部的变量,而内部的外部访问不了: 貌似都非常有道理,其实仔细想来只不 ...

  3. 重操JS旧业第八弹:面向对象与继承

    js里面没有语言语法层面的继承机制,但这并不意味着js就不能实现继承,利用js属性和方法动态性来模拟实现继承,通过总结大概有如下方法实现: 1 原型链继承 我们知道原型在对象中扮演着重要的角色,函数本 ...

  4. 重操JS旧业第七弹:面向对象与对象创建

    JS是一种完全面向对象的程序设计语言,在面向对象处理方面,具有多种多样的实现方式,加之对象成员的动态性使得这门语言更加灵活:而js对象成员动态性也是创建和扩展对象的有力方式. 1 对象成员动态性 属性 ...

  5. 重操JS旧业第六弹:基本类型包装

    在前面已经知道js中的类型有boolean,string,number,undefined,function,object,其中boolean,number,string为值类型.所谓的基本类型包装, ...

  6. 重操JS旧业第五弹:函数

    函数在任何编程语言中起着非常重要的位置,因为他是功能的最小单元,在js中函数是一种类型 Function 1 申明与定义 显示声明:function cc(){};函数名其实是函数的一个指针,函数名某 ...

  7. 重操JS旧业第四弹:Date与Global对象

    1 Date原理 Date类型表示时间,js中采用UTC国际协调时间,以1971年1月1日0分0秒0微秒开始,经过的毫秒数来表示时间,比如一年的时间计算 1分:1000*60: 1小时:1000(毫秒 ...

  8. 重操JS旧业第二弹:数据类型与类型转换

    一 数据类型 1 js中的数据类型 1.1 数据类型列举 1)number类型 2)boolean类型 3)string类型 4)对象类型 5)函数类型 6)undefined类型 1.2 数据类型获 ...

  9. 重操JS旧业第九弹:函数表达式

    函数表达式,什么概念,表达式中的函数表达式. 1 函数申明 function 函数名([函数参数]){ //函数体 } js中无论像这样的显示函数什么放在调用之前还是调用之后,都不影响使用,因为js解 ...

随机推荐

  1. word20161203

    B-channel / B 信道 B-ISDN, broadband integrated services digital network / 广播综合业务数字网络 backbone router  ...

  2. curl 查看一个web站点的响应时间(rt)

    1. curl 查看web站点rt curl -o /dev/null -s -w %{time_namelookup}::%{time_connect}::%{time_starttransfer} ...

  3. python学习之——计算文件行数

    # -*- coding: cp936 -*- #转载源于:http://blog.csdn.net/houyj1986/article/details/21196027 #计算文件行数 #1.文件比 ...

  4. PowerDesigner-如何导出建表sql脚本

    1 按照数据库类型,切换数据库. Database-> Change Current DBMS... 2 生成sql脚本 Database -> Database Generation 的 ...

  5. Linux 动态链接库学习笔记

    参考资料: http://www.linuxidc.com/Linux/2012-01/50739.htm http://www.yolinux.com/TUTORIALS/LibraryArchiv ...

  6. 20 个非常棒的jQuery内容滑动插件

    Wow Slider  WOW Slider是一款小巧易用的网页滑块设计.该软件内置大量的模版和工具,让你轻松设计出完美的视觉效果.他还可以帮助用户在短时间内创造出梦幻般的滑块,而无需编码和图像编辑, ...

  7. Oracle Day3 多行函数、多表查询

    1.多行函数 Sum avg max min count 组函数具有滤空的作用(添加nvl屏蔽该功能) 分组group by 多行分组 分组过滤 where 和分组过滤的区别(having) 分组的增 ...

  8. z-index用法总结

    一.定义: z-index 只适用于元素有定位的情况,表示层级 数值越大 层级越高 展示的位置越靠前. 二.用法: 1.同级关系: z-index值较大的元素将叠加在z-index值较小的元素之上 ( ...

  9. ASP.net里不让浏览器缓存代码和Session使用注意事项

    //不让浏览器缓存             context.Response.Buffer = true;             context.Response.ExpiresAbsolute = ...

  10. 2018-2019-2 网络对抗技术 20165328 Exp6 信息收集与漏洞扫描

    目录 实验要求 基础问题回答: 实验过程: 各种搜索技巧的应用及DNS IP注册信息的查询 基本扫描技术 漏洞扫描--使用OpenVAS 实验感想 实验要求 (1)各种搜索技巧的应用 (2)DNS I ...