内容要点:

一.join()

Array.join()方法将数组中所有元素都转化为字符串并连接在一起,返回最后生产的字符串。

可以指定一个可选的字符串在生产的字符串中来分隔数组的各个元素。如果不指定分隔符,默认使用逗号。

var a = [1,2,3];  //创建一个包含三个元素的数组

a.join();        //=>"1,2,3"

a.join(" ");    //=>"1 2 3"

a.join("");    //=>"123"

var b = new Array(10); //长度为10的空数组

b.join('-')  //=》'---------':9个连字组成的字符串

二.reverse()

Array.reverse()方法将数组中的元素颠倒顺序,返回逆序的数组。它采取了替换;换句话说,它不通过重新排列的元素创建新的数组,而是在原先的数组中重新排列它们。例如:

var a = [1,2,3];

a.reverse().join();  //"3,2,1",并且现在a是[3,2,1]

三.sort()

Array.sort()方法将数组中的元素排序并返回排序后的数组。当时,数组元素以字母表顺序排序(如有必要将临时转化为字符串进行比较):

var a = new Array("banana","cherry","apple");

a.sort();

var s = a.join(","); //s = = "apple,banana,cherry"

如果数组包含undefined元素,它们会被排到数组的尾部。

为了按照其他方式而非字母表顺序进行数组排序,必须给sort()方法传递一个比较函数。该函数决定了它的两个参数在排好序的数组中的先后顺序。

假设第一个参数应该在前,比较函数应该返回一个小于0的数值。反之,假设第一个参数应该在后,函数应该返回一个大于0的数值。并且,假设两个值相等(也就是说,它们的顺序无关紧要),函数应该返回0.

例如:用数组大小而非字母表顺序进行数组排序,代码如下:

var a=[33,4,1111,222];

var b=a.sort();

console.log(b);  //字母表顺序:1111,222,33,4

var c=a.sort(function(a,b){        //数值排序:4,33,222,1111

return a-b;               //根据顺序,返回负数,0,正数

});

console.log(c);  //数值排序:4,33,222,1111

a.sort(function(a,b){return b-a}); //数值大小相反的顺序

注意:这里使用匿名函数表达式非常方便。既然比较函数只使用一次,就没必要给它们命名了。

另外一个数组元素排序的例子,也许需要对一个字符串数组执行不区分大小写的字母表排序,比较函数首先将参数都转化为小写字符串(使用toLowerCase()方法),再开始比较:

a = ['ant','Bug','cat','Dog']

a.sort();   //区分大小写的排序:['Bug','Dog','ant','cat']

a.sort(function(s,t){  //不区分大小写的排序

var a = s.toLowerCase();

var  b = t.toLowerCase();

if(a<b)  return -1;

if(a > b) return 1;

return 0;

});    //=>['ant','Bug','cat','Dog']

四.concat()

Array.concat()方法创建并返回一个新数组,它的元素包括调用concat()的原始数组的元素和concat()的每个参数。

如果这些参数中的任何一个自身是数组,则连接的是数组的元素,而非数组本身。

但要注意,concat()不会递归扁平化数组的数组。concat()也不会修改调用的数组。

例如:

var a = [1,2,3];

a.concat(4,5)  //返回[1,2,3,4,5]

a.concat([4,5]) //返回[1,2,3,4,5]

a.concat([4,5],[6,7]) //返回[1,2,3,4,5,6,7]

a.concat(4,[5,[6,7]]) //返回[1,2,3,4,5,[6,7]]

五.slice()

Array.slice()方法返回指定数组的一个片段或子数组。它的两个参数分别指定了片段的开始和结束的位置。

返回的数组包含第一个参数指定的位置和所有到但不含第二个参数指定的位置之间的所有数组元素。

如果只指定一个参数,返回的数组将包含从开始位置到数组结尾的所有元素。

如参数中出现负数,它表示相对于数组中最后一个元素的位置。 例如,参数-1指定了最后一个元素,而-3指定了倒数第三个元素。

注意,slice()不会修改调用的数组。

例如:

var a = [1,2,3,4,5];

a.slice(0,3);  //返回[1,2,3]

a.slice(3);  //返回[4,5]

a.slice(1,-1); //返回[2,3,4]

a.slice(-3,-2); //返回[3]

六.splice()

Array.splice()方法是数组中插入或删除元素的通用方法。不同于slice()和concat(),splice()会修改调用的数组。

注意,splice()和slice()拥有非常相似的名字,但它们的功能却有本质的区别

splice()能够从数组中删除元素、插入元素到数组中或者同时完成这两种操作。

在插入或删除点之后的数组元素会根据需要增加或减小它们的索引值,因此数组的其他部分仍然保持连续的.

splice()的第一个参数指定了插入和(或)删除的起始位置。第二个参数指定了应该从数组中删除的元素的个数。

如果省略第二个参数,从起始点开始到数组结尾的所有元素都将被删除。

splice()返回一个由删除元素组成的数组,或者如果没有删除元素就返回一个空数组。

例如:

var a = [1,2,3,4,5,6,7,8];

a.splice(4); //返回[5,6,7,8];a是[1,2,3,4]

a.splice(1,2); //返回[2,3];a是[1,4]

a.splice(1,1); //返回[4],a是[1]

splice()的前两个参数指定了需要删除的数组元素。紧随其后的任意个数的参数指定了需要插入到数组中的元素,从第一个参数指定的位置开始插入。

例如:

var a = [1,2,3,4,5];

a.splice(2,0,'a','b');  //返回[],a是[1,2,'a','b',3,4,5]

a.splice(2,2,[1,2],3);  //返回['a','b',[1,2],3,3,4,5]

注意:区别于concat(),splice()会插入数组本身而非数组的元素。

八.push()和pop()

push()和pop()方法允许将数组当做栈来使用。

push()方法在数组的尾部添加一个或多个元素,并返回数组新的长度。

pop()方法则相反:它删除数组的最后一个元素,减少数组长度并返回它删除的值。

注意,两个方法都修改并替换原始数值而非生成一个修改版的新数组。

组合使用push()和pop()能够用js数组实现先进后出的栈。

例如:

var stack = [];

stack.push(1,2); //stack:[1,2]  返回2

stack.pop(); //stack:[1] 返回2

stack.push(3); //stack:[1,3] 返回2

stack.pop();    //stack:[1] 返回3

stack.push([4,5]); //stack:[1,[4,5]] 返回2

stack.pop()      //stack:[1] 返回[4,5]

stack.pop();     //stack:[]  返回1

九.unshift()和shift()

unshift()和shift()方法的行为非常类似,不一样的是前者是在数组的头部而非尾部进行元素的插入和删除操作。

unshift()在数组的头部添加一个或多个元素,并将已存在的元素移除到更高索引的位置来获得足够的空间,最后返回数组新的长度。

shift()删除数组的第一个元素并将其返回,然后把所有随后的元素下移一个位置来填补数组头部的空缺.

例如:

var a = []; //a:[]

a.unshift(1); //a:[1]  返回:1

a.unshift(22);  //a:[22,1] 返回:2

a.shift();  //a:[1] 返回:22

a.unshift(3,[4,5]); //a:[3,[4,5],1] 返回:3

a.shift();  //a:[[4,5],1] 返回:3

a.shift();  //a:[1] 返回:[4,5]

a.shift();  //a:[]  返回:1

十.toString()和toLocaleString()

数组和其他JS对象一样拥有toString()方法。针对数组,该方法将其每个元素转化为字符串(如有必要将调用元素的toString()方法)并且输出用逗号分隔的字符串列表。

注意,输出不包括方括号或其他任何形式的包裹数组值的分隔符。

例如:

[1,2,3].toString() //生成'1,2,3'

["a","b","c"].toString()  //生成'a,b,c'

[1,[2,'c']].toString() //生成 '1,2,c'

注意,这里与不使用任何参数调用join()方法返回字符串是一样的。

toLocaleString()是toString()方法的本地化版本,它调用元素的toLocaleString()方法将每个数组元素转化为字符串,并且使用本地化(和自定义实现的)分隔符将这些字符串连接起来生成最终的字符串。

《JS权威指南学习总结--7.8 数组方法》的更多相关文章

  1. 简单物联网:外网访问内网路由器下树莓派Flask服务器

    最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...

  2. 利用ssh反向代理以及autossh实现从外网连接内网服务器

    前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...

  3. 外网访问内网Docker容器

    外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...

  4. 外网访问内网SpringBoot

    外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...

  5. 外网访问内网Elasticsearch WEB

    外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...

  6. 怎样从外网访问内网Rails

    外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...

  7. 怎样从外网访问内网Memcached数据库

    外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...

  8. 怎样从外网访问内网CouchDB数据库

    外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...

  9. 怎样从外网访问内网DB2数据库

    外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...

  10. 怎样从外网访问内网OpenLDAP数据库

    外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...

随机推荐

  1. [Bzoj]1012最大数maxnumber

    题目如上(线段树???),蒟蒻第二眼想法(其实这道题正解是单队的说,但蒟蒻刚学线段树,于是...就) 献上黑历史: RE是因为蒟蒻数组开太小:第一次开110000:第二次开200000:结果就………… ...

  2. 安卓---app自动更新

    主要参考:http://blog.csdn.net/jdsjlzx/article/details/46356013/ 效果如下: 大致思路:[原文] 首先,我们要有一个可以被手机访问的后台. 这里有 ...

  3. OpenCV备忘

    都是转来的内容的,算是整理一下 OpenCV备忘 深度和通道的理解 CV_8UC1 是指一个8位无符号整型单通道矩阵, CV_32FC2是指一个32位浮点型双通道矩阵 CV_8UC1 CV_8SC1 ...

  4. vedio_note2

    例化 for example ex_cnt ex_cnt_inst( //模块名 例化的名字 .clk(ckl_o), // . 后面是原模块的名字 括号里面是top里的名字 .rst_n(rst_n ...

  5. usaco 2.2.4 生日派对灯(最近写题碰到的,虽然知道现在写这个有点晚了)

    经过分析,他看似很多的开灯的方法其实合并起来就只有八个. 首先,一个开关在执行的时候只能按一次(因为你就算按了两次就相当于一次也没有按). 当一个都不按的时候  当然就只有一种:不按. 当按一下的时候 ...

  6. zabbix 布署实践【5 使用邮箱SMTP SSL推送告警邮件】

    由于传统的邮件推送脚本使用smtp 25端口,在各大邮箱提供商已不适用,已经向SSL过渡,这里以QQ邮箱为例,使用SSL 465端口 登录zabbix-server 进入 cd /usr/lib/za ...

  7. Sonatype Nexus 服务启动失败问题解决

    Sonatype Nexus 服务启动失败问题解决 问题前述: 近日在开发机本机安装了 Oracle 数据库快捷版 11g2 之后,重启电脑后发现本机的maven代理服务无法访问. 现象 通过 Win ...

  8. CodeForces 670D Magic Powder

    二分. 二分一下答案,然后验证一下. #pragma comment(linker, "/STACK:1024000000,1024000000") #include<cst ...

  9. 2-Bom

    前言 window对象是BOM的顶层(核心)对象,所有对象都是通过它延伸出来的,也可以称为window的子对象.由于window是顶层对象,因此调用它的子对象时可以不显示的指明window对象 例如下 ...

  10. iOS开发系列-九宫格算法-xib

    给大家演示 应用程序下载 小项目,效果图:涉及知识点:懒加载,九宫格算法,字典转模型,自定义UIView ,xib文件的使用 首先把素材拖到Xcode项目中:简单看一下素材文件 此时大家应该首先关注. ...