版权声明:文章首发于本人简书账号人生还有多少个二十年
欢迎转载,转载请注明出处
前言
数组是编程语言中最为常见的数据类型之一,跟对象相比,它的突出特点是“有序”。JS的数组还有一些其它的特点,比如,数组项的类型可以不一致,数组的大小可以动态调整,没有数组下标越界的概念。
数组的常用方法
接下来,以例子为主,解释为辅,讲解相关知识,欲知详情,请参阅文末“参考资源”
1. 增删元素(push()、pop()、unshift()、shift())
|
|
- push()和unshift()都是向数组添加元素,可以同时添加多个元素,它们的返回值都是更新后的数组的长度;
- pop()和shift()都是从数组中移除元素,只移除一项,它们的返回值都是被移除的那个元素;
- push()和pop()的操作发生在数组尾部,unshift()和shift()的操作发生在数组头部;
- 栈数据结构的访问规则是LIFO(后进先出),插入和删除的操作发生在同一端;而队列的访问规则为FIFO(先进先出),插入和删除的操作不在同一端;
- push()配合pop()可以模拟栈的行为;shift()和push()、unshift()和pop()都可以实现类似队列的行为。
2. 重排序(reverse()、sort())
|
|
- 从上面可以看出,reverse()和sort()都会改变原数组,并且它们的返回值都是排序之后的数组。reverse()用于反转数组的顺序。
- sort()用于以升序或者降序的方式排列数组项。
为了实现排序,sort()方法会调用每个数组项的toString()转型方法,然后比较得到的字符串,以确定如何排序。即使数组中的每一项都是数值,sort()方法比较的也是字符串。
|
|
sort()可以接收一个函数,用于提供更实用的排序功能。
格式如下:sort(fn(arg1, arg2))
3. 操作方法(concat()、slice()、splice())
|
|
|
|
|
|
4. 位置方法
|
|
5. 迭代方法(every()、some()、filter()、map()、forEach())
|
|
这五个迭代方法都接收一个函数,并且对数组中的每一项都运行给定函数,这些迭代方法都不会改变原数组。它们的返回值如下:
- every():给定函数对每一项都返回true,则返回true。
- some():给定函数对任一项返回true,则返回true。
- filter():返回该函数会返回true的项组成的数组。
- map():返回每次函数调用的结果组成的数组。
- forEach():没有返回值。
6. 归并方法(reduce()、reduceRight())
|
|
reduce()和reduceRight()这两个方法都会迭代数组的所有项,然后构建一个最终返回的值。前者的迭代顺序是从前往后,后者则相反
7. 转换方法(join())
join()可以将数组转换为字符串,相反,split()可以将字符串转换为数组。
可以给它们指定分隔符,若未指定,则默认使用逗号。
Attentions
- 了解各个数组方法的功能,是否有返回值,返回值是什么,是否对原数组造成影响。
- 位置方法、迭代方法和归并方法都是ES5的标准。IE兼容性:IE9+。
参考资源
- 《JavaScript高级程序设计(第3版)》
- 《JavaScript权威指南》
- MDN