Array是Js的原生对象,同时也是一个构造函数,可以用它生成新的数组

用不用new结果都一样

var arr = new Array(2);
// 等同于
var arr = Array(2);

但是Array作为构造函数,行为很不一致,因此不建议使用它生成新数组,直接使用数组字面量是更好的方法

静态方法 

Array.isArray():返回一个布尔值,表明参数是否为数组,可以弥补typeof运算符的不足

实例方法 

valueOf():所有对象都有的方法,表示对该对象求值,数组里的返回数组本身

toString():也是通用方法,数组中返回数组的字符串形式

push():在数组的末端添加一个或多个元素,并返回添加新元素后的数组长度

pop():删除数组的最后一个元素,并返回该元素

push,pop   栈

对空数组使用pop方法,不会报错,而是返回undefined

shift():删除数组的第一个元素,并返回该元素。

shift()方法可以遍历并清空一个数组,前提是元素不为0或任何布尔值为false的元素

push,shift   队列

unshift():在数组的第一个位置添加元素,并返回添加新元素后的数组长度,可接受多个参数

join():以指定参数作为分隔符,将所有数组成员连接为一个字符串返回,如果不提供参数,默认用逗号分隔,如果数组成员是undefined或null或空位,会被转成空字符串。

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

a.join(' ') // '1 2 3 4'
a.join(' | ') // "1 | 2 | 3 | 4"
a.join() // "1,2,3,4" [undefined, null].join('#')
// '#' ['a',, 'b'].join('-')
// 'a--b'

通过call方法,这个方法也可以用于字符串或类似数组的对象

Array.prototype.join.call('hello', '-')
// "h-e-l-l-o" var obj = { 0: 'a', 1: 'b', length: 2 };
Array.prototype.join.call(obj, '-')
// 'a-b'

concat():用于多个数组的合并。将新数组的成员,添加到原数组成员的后部,然后返回一个新数组,原数组不变

除了数组作为参数,concat也接受其他类型的值作为参数,添加到目标数组尾部

[1, 2, 3].concat(4, 5, 6)
// [1, 2, 3, 4, 5, 6]

如果数组成员包括对象,concat方法返回当前数组的一个浅拷贝,即一个引用 所以更改原对象,也会带来新数组的改变

reverse():颠倒排列数组元素,返回改变后的数组

slice(start ,end):用于提取目标数组的一部分,返回一个新数组,原数组不变,左闭右开

start以0开始,end默认为最后一个

如果slice方法的参数是负数,则表示倒数计算的位置

var a = ['a', 'b', 'c'];
a.slice(-2) // ["b", "c"]
a.slice(-2, -1) // ["b"]
上面代码中,-2表示倒数计算的第二个位置,-1表示倒数计算的第一个位置。

如果第一个参数大于等于数组长度,或第二个参数小于第一个参数,返回空数组

slice方法的一个重要应用,是将类似数组的对象转为真正数组

Array.prototype.slice.call({ 0: 'a', 1: 'b', length: 2 })
// ['a', 'b'] Array.prototype.slice.call(document.querySelectorAll("div"));
Array.prototype.slice.call(arguments);
上面代码的参数都不是数组,但是通过call方法,在它们上面调用slice方法,就可以把它们转为真正的数组。

 

splice()方法用于删除原数组的一部分成员,并可以在删除的位置添加新的数组成员,返回值是被删除的元素。该方法会

改变原数组。

使用如下:

arr.splice(start, count, addElement1, addElement2, ...);
//第一个参数是删除的起始位置(从0开始),然后是要删除元素的个数,接着的参数个数
//任意,为要插入数组的值 var a = ['a', 'b', 'c', 'd', 'e', 'f'];
a.splice(4, 2, 1, 2); //删除 ["e", "f"],插入1,2
a // 结果["a", "b", "c", "d", 1, 2] 起始位置如果是负数,表示从倒数位置开始删除
var a = ['a', 'b', 'c', 'd', 'e', 'f'];
a.splice(-4, 2) // 删除["c", "d"] 如果只是单纯地插入元素,第二个参数可以设为0
如果只提供第一个参数,等于将原数组在指定位置拆分成两个数组

  

sort()方法

对数组成员进行排序,默认按照字典顺序排序,排序后,原数组将被改变

如果想让sort方法按照自定义方式排序,可以传入一个函数作为参数

[10111, 1101, 111].sort(function (a, b) {
return a - b;
})
//排序结果: [111, 1101, 10111]
//如果比较函数的返回值大于0,表示第一个成员排在第二个成员后面
//其他情况下,都是第一个元素排在第二个元素前面

  

map函数()

将数组的所有成员依次传入参数函数,然后把每一次的执行结果组成一个新数组返回,原数组不变

var numbers = [1, 2, 3];

numbers.map(function (n) {
return n + 1;
});
// 返回数组[2, 3, 4] map方法还可以接受第二个参数,用来绑定回调函数内部的this变量
var arr = ['a', 'b', 'c']; [1, 2].map(function (e) {
return this[e];
}, arr)
// ['b', 'c'] map方法可以接受一个函数作为参数,该函数调用时,map方法向它传入三个参数:当前成员
当前位置和数组本身 [1, 2, 3].map(function(elem, index, arr) {
return elem * index;
});
// [0, 2, 6]

map方法不会跳过undefined和null,但是会跳过空位

var f = function (n) { return 'a' };

[1, undefined, 2].map(f) // ["a", "a", "a"]
[1, null, 2].map(f) // ["a", "a", "a"]
[1, , 2].map(f) // ["a", , "a"]

 

forEach()方法

与map方法用法规则相似,但它不返回值,只用来操作数据,总会将所有成员遍历完

filter()方法

用于过滤数组成员,满足条件的成员组成一个新数组返回

用法和之前的函数类似,可以自定义筛选函数

参数函数可以有三个参数:元素,下标,数组

还可以接受第二个参数,用来绑定this变量

[1, 2, 3, 4, 5].filter(function (elem, index, arr) {
return index % 2 === 0;
});
// [1, 3, 5] var obj = { MAX: 3 };
var myFilter = function (item) {
if (item > this.MAX) return true;
};
var arr = [2, 8, 3, 4, 1, 3, 2, 9];
arr.filter(myFilter, obj) // [8, 4, 9]

 

some(),every() 

返回一个布尔值,表示判断数组成员是否符合某种条件

接受一个函数作为参数,函数接受那三个参数,返回布尔值,还可以接受第二个参数,用法同上面几个函数

some是只要一个成员满足条件即为true

every是要求所有

对于空数组,some返回false,every返回true,回调函数都不会执行

var arr = [1, 2, 3, 4, 5];
arr.some(function (elem, index, arr) {
return elem >= 3;
});
// true
arr.every(function (elem, index, arr) {
return elem >= 3;
});
// false

reduce(),reduceRight()

依次处理数组的每个成员,最后累计为一个值

reduce是从左到右处理

reduceRight是从右到左处理

reduce方法第一个参数是一个函数,接受以下参数

累积变量,默认为数组的第一个成员

当前变量,默认为数组的第二个成员

当前位置(从0开始)

原数组 

第二个参数可以用来指定初值

[1, 2, 3, 4, 5].reduce(function (a, b) {
return a + b;
}, 10);
// 25

  

indexOf,lastIndexOf

indexOf方法返回给定元素在数组中第一次出现的位置,如果没有出现则返回-1

lastIndexOf返回给定元素在数组中最后一次出现的位置,如果没有出现则返回-1

但这两个方法无法确定数组成员中NaN的位置

(因为函数内部用严格相等运算符===来进行比较,而NaN是唯一一个不等于自身的值)

可以链式使用这些数组方法

 

 

Js学习(6) 标准库-Array对象的更多相关文章

  1. 记阮一峰---JavaScript 标准参考教程之标准库-Object对象

    在看到阮大神的-标准库-Object对象时 有个 类型判断类型 方法可能以后会用到.特此记录一下 4.3:toString()的应用:判断数据类型 Object.prototype.toString方 ...

  2. 一起学习Boost标准库--Boost.StringAlgorithms库

    概述 在未使用Boost库时,使用STL的std::string处理一些字符串时,总是不顺手,特别是当用了C#/Python等语言后trim/split总要封装一个方法来处理.如果没有形成自己的com ...

  3. 一起学习Boost标准库--Boost.texical_cast&format库

    今天接续介绍有关字符串表示相关的两个boost库: lexical_cast 将数值转换成字符串 format 字符串输出格式化 首先,介绍下lexical_cast ,闻其名,知其意.类似C中的at ...

  4. go学习笔记-标准库

    标准库 名称 摘要 archive tar tar包实现了tar格式压缩文件的存取. zip zip包提供了zip档案文件的读写服务. bufio bufio 包实现了带缓存的I/O操作. built ...

  5. 从0开始的Python学习017Python标准库

    简介 Python标准库使随着Python附带安装的,它包含很多有用的模块.所以对一个Python开发者来说,熟悉Python标准库是十分重要的.通过这些库中的模块,可以解决你的大部分问题. sys模 ...

  6. Js学习(7)标准库-object对象

    Js原生提供Object对象,O大写,所有的其他对象都继承自Object对象,都是Object的实例 Object对象的原生方法分为两类: 本身的方法:直接定义在Object对象的方法 实例方法:定义 ...

  7. Python学习笔记12:标准库之对象序列化(pickle包,cPickle包)

    计算机的内存中存储的是二进制的序列. 我们能够直接将某个对象所相应位置的数据抓取下来,转换成文本流 (这个过程叫做serialize),然后将文本流存入到文件里. 因为Python在创建对象时,要參考 ...

  8. JS学习笔记(三) 对象

    参考资料: 1. http://www.w3school.com.cn/js/js_objects.asp ☂ 知识点: ☞ Javascript中的所有事物都是对象. ☞ Javascript是基于 ...

  9. JS学习笔记-OO疑问之对象创建

    问一.引入工厂,解决反复代码 前面已经提到,JS中创建对象的方法,不难发现,主要的创建方法中,创建一个对象还算简单,假设创建多个类似的对象的话就会产生大量反复的代码. 解决:工厂模式方法(加入一个专门 ...

随机推荐

  1. python 保存对象文件

    之前用 R 语言一直感觉 .Rdata 格式的文件很好用,可以把每次执行的中间文件保存便于下次调用,刚熟悉 Python 还没接触这块知识,所以有时候做项目不太顺手,索性上网搜了下,整理如下: 模型存 ...

  2. 虚拟机环境配置(Docker)

    安装虚拟机完毕后 在linux虚拟机上安装docker 使用远程工具连接虚拟机,查看ip地址 ip addr Docker常用命令&操作 1).镜像操作 | 操作 | 命令 | 说明 | | ...

  3. 管理工具:SWOT、PDCA、6W2H、SMART、WBS、时间管理

    01:SWOT分析法 Strengths:优势 Weaknesses:劣势 Opportunities:机会 Threats:威胁 意义:帮您清晰地把握全局,分析自己在资源方面的优势与劣势,把握环境提 ...

  4. js延迟

    function sleep(numberMillis) { var now = new Date(); var exitTime = now.getTime() + numberMillis; wh ...

  5. centos7-网络连接

    Centos系统在安装完毕后,默认联网状态为no,需要手动开启联网状态. 编辑网卡文件 vim /etc/sysconfig/network-scripts/ifcfg-eno16777736 修改O ...

  6. Grafana介绍

    Grafana是一个开源的度量分析与可视化套件.纯 Javascript 开发的前端工具,通过访问库(如InfluxDB),展示自定义报表.显示图表等.大多使用在时序数据的监控方面,如同Kibana类 ...

  7. c# 抽象类 抽象函数 接口

    抽象类与抽象方法: 被abstract关键字修饰的类叫做抽象类 被abstract关键字修饰的方法叫做抽象方法 1.抽象方法必须放在抽象类中 2.抽象方法不可以实现代码,用空语句替代 3.抽象方法可以 ...

  8. eclipse开发Java web工程时,jsp第一行报错,如何解决?

    与myeclipse不同,eclipse开发java web项目时是要下载第三方软件(服务器)的,正是这个原因,很多初学者用eclipse学习java web的时候,总是会遇到一些小问题.其中常见的一 ...

  9. [SQL]某数据库中查出包含 字段名 的所有表名

    --利用SQL语句来查询字段所在的表 --从某数据库中查出包含 字段名 字段的所有表名 SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE ...

  10. Java笔记Spring(二)

    spring-core 通过Gradle构建工具,转换包的命名空间为org.springframework下 cglib包,net.sf.cglib -> org.springframework ...