数组详解

在完成本章之前,我想向你介绍几个对象相关的概念。 我将首先介绍一些通常实用的数组方法。

我们在本章的前面已经了解了pushpop方法,分别用于在数组末尾添加或删除元素。相应地,在数组的开头添加或删除元素的方法分别是unshiftshift

  1. let todoList = [];
  2. function remember(task) {
  3. todoList.push(task);
  4. }
  5. function getTask() {
  6. return todoList.shift();
  7. }
  8. function rememberUrgently(task) {
  9. todoList.unshift(task);
  10. }

这个程序管理任务队列。 你通过调用remember("groceries"),将任务添加到队列的末尾,并且当你准备好执行某些操作时,可以调用getTask()从队列中获取(并删除)第一个项目。 rememberUrgently函数也添加任务,但将其添加到队列的前面而不是队列的后面。

有一个与indexOf方法类似的方法,叫lastIndexOf,只不过indexOf从数组第一个元素向后搜索,而lastIndexOf从最后一个元素向前搜索。

  1. console.log([1, 2, 3, 2, 1].indexOf(2));
  2. // → 1
  3. console.log([1, 2, 3, 2, 1].lastIndexOf(2));
  4. // → 3

indexOflastIndexOf方法都有一个可选参数,可以用来指定搜索的起始位置。

另一个基本方法是slice,该方法接受一个起始索引和一个结束索引,然后返回数组中两个索引范围内的元素。起始索引元素包含在返回结果中,但结束索引元素不会包含在返回结果中。

  1. console.log([0, 1, 2, 3, 4].slice(2, 4));
  2. // → [2, 3]
  3. console.log([0, 1, 2, 3, 4].slice(2));
  4. // → [2, 3, 4]

如果没有指定结束索引,slice会返回从起始位置之后的所有元素。你也可以省略起始索引来复制整个数组。

concat方法可用于将数组粘在一起,来创建一个新数组,类似于+运算符对字符串所做的操作。

以下示例展示了concatslice的作用。 它接受一个数组和一个索引,然后它返回一个新数组,该数组是原数组的副本,并且删除了给定索引处的元素:

  1. function remove(array, index) {
  2. return array.slice(0, index)
  3. .concat(array.slice(index + 1));
  4. }
  5. console.log(remove(["a", "b", "c", "d", "e"], 2));
  6. // → ["a", "b", "d", "e"]

如果你将concat传递给一个不是数组的参数,该值将被添加到新数组中,就像它是单个元素的数组一样。