JavaScript-Array类型
💡
如果你是从
BY这篇文章过来的,想要快速知道答案,直接拖到文章最后查看吧~
简单介绍一下吧:
数组类型,每一项可以存储任何类型的数据。
例如:['abc', 100, true]
1 检测数组
-
value instanceof Array
对于一个网页或者一个全局作用域而言,可以很好的解决;但是如果网页中包含多个框架,实际就存在多个全局执行环境,从而存在多个不同版本的 Array 构造函数。 -
Array.isArray(value)
ES5 中新增的方法,目的是最终确定某个值是不是数组,不用去管它在哪个全局环境。
2 栈方法
栈是一种 LIFO(Last-In-First-Out,后进先出)的数据结构,也就是最新添加的项最早被移除。而栈中项的插入(叫做推入)和移除(叫做弹出),只发生在一个位置-栈的顶部。
-
😋
push()
接收任意数量的参数,返回修改后的原数组的长度。 -
😋
pop()
不接受任何参数,从数据移除最后一项,返回移除项的值。
3 队列方法
队列数据结构的访问规则是 FIFO(First-In-First-Out,先进先出)。队列在列表的末端添加项,从列表的前端移除项。
-
😋
shift()
不接受任何参数,移除数组中的第一项,并返回该项的值。 -
😋
unshift()
接收任意长度的参数,返回修改后的数据长度。
4 重排序方法
-
😋
reverse()
反转数组项的顺序。 -
😋
sort()
默认按照升序排列数组项,即从小到大。sort() 方法实现排序,会调用每个数组项的 toString() 方法,然后比较得到的字符串。因此我们可以得到,[0, 1 , 2, 5, 10, 15, 20].sort() // [0, 1, 10, 15, 2, 20, 5]
解决方法:
sort() 方法接收 比较函数 作为一个参数,以便我们指定哪些值位于哪些值前面。
比较函数:接收两个参数,如果第一个参数位于第二个参数之前则返回负数,如果两个参数相等返回 0 ,如果第一个参数位于第二个参数后面则返回正数。var arr = [0, 1 , 2, 5, 10, 15, 20]; function compare(a, b){ if (a > b) { return -5; } else if (a === b) { return 0; } else if (a < b) { return 99; } } arr.sort(compare); // [20, 15, 10, 5, 2, 1, 0]
5 操作方法
-
concat()
将接收到的参数,添加到数组的副本末尾,最终返回拼接后的数组。let arr = [1, 2, 3]; arr.concat('abc', false); // [1, 2, 3, "abc", false] arr.concat([true, false, [555]]) // [1, 2, 3, true, false, [5]]
-
slice()
该方法接收 1 个或 2 个参数,分别代表起始和结束位置;
一个参数:返回该起始位置到数组末尾的所有项;
两个参数:返回该起始位置到结束位置 (不包括结束位置)的所有项。
💡如果传入的参数为负数,则代表从末尾开始定位
;let arr = ['first', 'second', 'third', 'fourth']; arr.slice(1); // ['second', 'third', 'fouth'] ; arr.slice(1, 3); // ['second', 'third']
-
😋
splice()
好啦~这应该是最强大的数组方法啦~主要有如下几种啊:1)删除
可以删除任意数量的项,
接收两个参数:index(代表第一项的位置),count(代表删除的项数)
返回被删除的数组,原数组为删除后的数组。var arr= ['a', 'b', 'c', 'd', 'f']; arr.splice(-5, 1); // ['a'],此时 arr 为 [ 'b', 'c', 'd', 'f']
2)插入
接收 (index, count, value1, value2, ....) 参数:index(代表起始位置),count(代表删除的项数),
返回被删除的数组。var arr= ['a', 'd', 'f']; arr.splice(1, 0, 'b', 'c'); // [],此时 arr 为 ['a', 'b', 'c', 'd', 'f'];
3)替换
其实用法同上,只是 count 数目 > 0,代表了从 index 开始删除 count 个数值。
var arr= ['a', 'd', 'f']; arr.splice(1, 2, 'b', 'c'); // ['d', 'f'], 此时 arr 变成 ['a', 'b', 'c']
6 位置方法
接收两个参数:value(要查找的项),index(开始查找的起始位置,可选);
如果找到返回索引位置,否则返回 -1;
-
indexOf()
-
lastIndexOf()
7 迭代方法
每个迭代方法接收两个参数:运行函数 和 运行该函数的作用域对象(影响 this 值,可选);
运行函数,接收三个参数:value(数组值),index(索引),array(数组)
-
every()
每一项都返回 true,则返回 true。 -
filter()
返回运行函数返回true的项组成的数组。 -
forEach()
无返回值,只是遍历操作。 -
map()
返回运行函数的返回项组成的数组。 -
some()
只要任意一项返回 true,则返回 true。
8归并方法
这两个方法都会迭代数组的所有项,然后构建一个最终的返回值。
-
reduce()
接收4个参数:lastValue(前一个值),currentValue(当前值),index(索引),array(数组)
第一次迭代发生在数组的第二项上,因此第一个参数是数组的第一项。var values = [1,2,3,4,5]; var sum = values.reduce(function(prev, cur, index, array){ return prev + cur; }); // sum 为 15;
-
reduceRight()
作用同上,只不过是从数组末尾开始操作;
第一次迭代应该发生在数组的倒数第二项,前一项为数组的最后一项。
好啦~
总结一下吧~
改变原数组的方法有:栈方法,队列方法,重排序方法,splice() 方法。
ps:会改变原数组的方法,都用 😋标注出来了。