数组详解
在完成本章之前,我想向你介绍几个对象相关的概念。 我将首先介绍一些通常实用的数组方法。
我们在本章的前面已经了解了push和pop方法,分别用于在数组末尾添加或删除元素。相应地,在数组的开头添加或删除元素的方法分别是unshift和shift。
let todoList = [];function remember(task) {todoList.push(task);}function getTask() {return todoList.shift();}function rememberUrgently(task) {todoList.unshift(task);}
这个程序管理任务队列。 你通过调用remember("groceries"),将任务添加到队列的末尾,并且当你准备好执行某些操作时,可以调用getTask()从队列中获取(并删除)第一个项目。 rememberUrgently函数也添加任务,但将其添加到队列的前面而不是队列的后面。
有一个与indexOf方法类似的方法,叫lastIndexOf,只不过indexOf从数组第一个元素向后搜索,而lastIndexOf从最后一个元素向前搜索。
console.log([1, 2, 3, 2, 1].indexOf(2));// → 1console.log([1, 2, 3, 2, 1].lastIndexOf(2));// → 3
indexOf和lastIndexOf方法都有一个可选参数,可以用来指定搜索的起始位置。
另一个基本方法是slice,该方法接受一个起始索引和一个结束索引,然后返回数组中两个索引范围内的元素。起始索引元素包含在返回结果中,但结束索引元素不会包含在返回结果中。
console.log([0, 1, 2, 3, 4].slice(2, 4));// → [2, 3]console.log([0, 1, 2, 3, 4].slice(2));// → [2, 3, 4]
如果没有指定结束索引,slice会返回从起始位置之后的所有元素。你也可以省略起始索引来复制整个数组。
concat方法可用于将数组粘在一起,来创建一个新数组,类似于+运算符对字符串所做的操作。
以下示例展示了concat和slice的作用。 它接受一个数组和一个索引,然后它返回一个新数组,该数组是原数组的副本,并且删除了给定索引处的元素:
function remove(array, index) {return array.slice(0, index).concat(array.slice(index + 1));}console.log(remove(["a", "b", "c", "d", "e"], 2));// → ["a", "b", "d", "e"]
如果你将concat传递给一个不是数组的参数,该值将被添加到新数组中,就像它是单个元素的数组一样。
