数组详解
在完成本章之前,我想向你介绍几个对象相关的概念。 我将首先介绍一些通常实用的数组方法。
我们在本章的前面已经了解了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));
// → 1
console.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
传递给一个不是数组的参数,该值将被添加到新数组中,就像它是单个元素的数组一样。