4

===什么是数组===

数组是数据的有序列表
创建数组的基本方式有两种
第一种是使用 Array 构造函数:var colors = new Array();
创建数组的第二种基本方式是使用数组字面量表示法:var colors = ["red", "blue", "green"];

===检测数组的方法===

1》通过instanceof来判断:value instanceof Array;
2》通过Array.isArray()方法来判断;

===数组的方法===

一共总结数组常见的 22 种方法!
其中 7 种会改变原数组值:push()、pop()、shift()、unshift()、reverse()、sort()、splice()
15 种不会改变原数组的值:toString()、toLocaleSting()、valueOf()、join()、concat()、slice()、indexOf()、lastIndexOf()、every()、filter()、forEach()、map()、some()、reduce()、reduceRight()

1.转换方法(toString、toLocaleSting、valueOf()、join)(不会修改原数组!)

所有对象都会有toString、toLocaleSting、valueOf()方法。
toString、toLocaleSting方法会将数组转换成以逗号(,)分割的字符串。
join()接收一个参数,将数组转换为字符串,并以这个参数作分割。

2.栈方法 (修改原数组!)

栈是一种 LIFO(Last-In-First-Out,后进先出)的数据结构,也就是最新添加的项最早被移除。而栈中项的插入(叫做推入)和移除(叫做弹出),只发生在一个位置——(栈的顶部)。ECMAScript 为数组专门提供了 push()和 pop()方法,以便实现类似栈的行为。
因为是栈后进先出,而且推入/弹出都是发生在栈的顶部。因此数组的尾部实际是存放在栈的顶部,所以push()(后增方法)添加在数组尾部,就是添加在栈的顶部。pop方法删除数组尾部一位数据也就是在栈顶部删除最新数据,满足后入先出去。

clipboard.png

clipboard.png

3.队列方法(修改原数组!)

队列数据结构的访问规则是 FIFO(First-In-First-Out, 先进先出)。队列在列表的末端添加项,从列表的前端移除项
结合使用 shift()和 push()方法,可以像使用队列一样使用数组。

clipboard.png

因为队列是先进先出,所以数组的尾部就对应着队列末端,所以通过push方法在数组尾部添加数据就是在队列末端添加。在使用shift方法在数组顶部移除一位数据就是在队列前端移除。

clipboard.png

ECMAScript 还为数组提供了一个 unshift()方法。顾名思义,unshift()与 shift()的用途相反: 它能在数组前端添加任意个项并返回新数组的长度。因此,同时使用 unshift()和 pop()方法,可以从相反的方向来模拟队列,即在数组的前端添加项,从数组末端移除项。

4.重新排序方法 (修改原数组!)

数组中已经存在两个可以直接用来重排序的方法:reverse()和 sort()。
reverse反转数组,sort按升序排列数组项——即最小的值位于最前面。sort()方法会调用每个数组项的 toString()转型方法,然后比较得到的字符串(javascript字符串在进行大于(小于)比较时,会根据第一个不同的字符的ascii值码进行比较,当数字(number)与字符串(string)进行比较大小时,会强制的将数字(number)转换成字符串(string)然后再进行比较),以确定如何排序。

clipboard.png

sort()方法可以接收一个比较函数作为参数,以便我们指定哪个值位于哪个值的前面。比较函数接收两个参数,如果第一个参数应该位于第二个之前则返回一个负数,如果两个参数相等 则返回 0,如果第一个参数应该位于第二个之后则返回一个正数。

clipboard.png

5.操作方法

concat (不修改原数组!):先创建当前数组一个副本,然后将接收到的参数 添加到这个副本的末尾,最后返回新构建的数组。在没有给 concat()方法传递参数的情况下,它只是 复制当前数组并返回副本。如果传递给 concat()方法的是一或多个数组,则该方法会将这些数组中的每一项都添加到结果数组中

clipboard.png

slice() (不修改原数组!): 基于当前数组中的一或多个项创建一个新数组。slice()方法可以 接受一或两个参数,即要返回项的起始结束位置。在只有一个参数的情况下,slice()方法返回从该参数指定位置开始到当前数组末尾的所有项。如果有两个参数,该方法返回起始结束位置之间的项,但不包括结束位置的项

clipboard.png

起始值大于结束值:返回【】;
负数则加上数组长度来确定坐标slice(-2,-1) === slice(1,2);

splice (修改原数组!): 有很多种用法:
删除:可以删除任意数量的项,只需指定 2 个参数:要删除的第一项的位置和要删除的项数。 例如,splice(0,2)会删除数组中的前两项。

clipboard.png

插入:可以向指定位置插入任意数量的项,只需提供 3 个参数:起始位置要删除的项数(0)要插入的项。如果要插入多个项,可以再传入第四、第五,以至任意多个项。例如, splice(2,0,"red","green")会从当前数组的位置 2 开始插入字符串"red"和"green"。

clipboard.png

替换:可以向指定位置插入任意数量的项,且同时删除任意数量的项,只需指定 3 个参数:起始位置要删除的项数要插入的任意数量的项。插入的项数不必与删除的项数相等。例如, splice (2,1,"red","green")会删除当前数组位置2的项,然后再从位置2开始插入字符串"red"和"green"

clipboard.png

6.位置方法 (不修改原数组!)

indexOf()lastIndexOf()。这两个方法都接收两个参数:要查找的项和(可选的)起点位置的索引。其中,indexOf()方法从数组的开头(位置0)开始向后查找,lastIndexOf()方法则从数组的末尾开始向前查找。内部使用===进行比较。

clipboard.png

7.迭代方法 (不修改原数组!)

ECMAScript5为数组定义了5个迭代方法。每个方法都接收两个参数:要运行的函数运行该函数的作用域对象(可选的)(影响 this 的值)。
传入这些方法中的函数会接收三个参数:数组项的值该项在数组中的位置数组对象本身。根据使用的方法不同,这个函数执行后的返回值可能会也可能不会影响方法的返回值。
every():对数组中的每一项运行给定函数,如果该函数对每一项都返回 true,则返回 true。 filter():对数组中的每一项运行给定函数,返回该函数会返回 true 的项组成的数组。
forEach():对数组中的每一项运行给定函数。这个方法没有返回值
map():对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组。
some():对数组中的每一项运行给定函数,如果该函数对任一项返回 true,则返回 true。

clipboard.png

8.归并方法(不修改原数组!)

reduce()reduceRight()。这两个方法都会迭代数组的所有项,然后构建一个最终返回的值。其中,reduce()方法从数组的第一项开始,逐个遍历到最后。而reduceRight()相反。
接收两个参数:要调用的函数作为归并基础的初始值(可选)
函数接收4个参数:前一个值当前值项的索引数组对象。这个函数返回的任何值都会作为第一个参数自动传给下一项。第一次迭代发生在数组的第二项上,因此第 一个参数是数组的第一项,第二个参数就是数组的第二项。

clipboard.png


搁浅
693 声望323 粉丝

想进BAT的前端er