使用数组存储不同类型的数据
以下是最简单的数组(Array)示例: 这是一个一维数组(one-dimensional array),它只有一层,或者说它里面没有包含其它数组。 可以观察到,这个数组中只包含了布尔值(booleans)、字符串(strings)、数字(numbers)以及 JavaScript 中的其他数据类型:
let simpleArray = ['one', 2, 'three', true, false, undefined, null];
console.log(simpleArray.length);
调用 console.log 显示 7。
所有数组都有一个表示长度的属性,我们可以通过 Array.length
来访问它。 下面是一个关于数组的更复杂的例子。 这是一个多维数组 (multi-dimensional Array),或者说是一个包含了其他数组的数组。 可以注意到,在它的内部还包含了 JavaScript 中的对象(objects)结构。 我们会在后面的小节中讨论该数据结构,但现在你只需要知道数组能够存储复杂的对象类型数据。
let complexArray = [
[
{
one: 1,
two: 2
},
{
three: 3,
four: 4
}
],
[
{
a: "a",
b: "b"
},
{
c: "c",
d: "d"
}
]
];
使用 push() 和 unshift() 为数组添加元素
数组的长度与数组能包含的数据类型一样,都是不固定的。 数组可以包含任意数量的元素,可以不限次数地往数组中添加元素或者从中移除元素。 总之,数组是可变的(mutable)。 在本挑战中,我们要学习两种修改数组的方法:Array.push()
和 Array.unshift()
。
这两个方法都接收一个或多个元素作为参数,并会将参数中的元素添加到该数组中。 push() 方法会将元素插入到数组的末尾,而 unshift() 方法会将元素插入到数组的开头。 请看以下例子:
let twentyThree = 'XXIII';
let romanNumerals = ['XXI', 'XXII'];
romanNumerals.unshift('XIX', 'XX');
romanNumerals 的值就变成了 ['XIX', 'XX', 'XXI', 'XXII']
。
romanNumerals.push(twentyThree);
romanNumerals 的值现在就变成了 ['XIX', 'XX', 'XXI', 'XXII', 'XXIII']
。 请注意这里,我们也可以使用变量作为参数,这让我们在动态修改数组数据时更加灵活。
使用 pop() 和 shift() 从数组中删除元素
push() 和 unshift() 都有一个与它们作用相反的函数:pop() 和 shift()。 与插入元素相反,pop() 会从数组的末尾移除一个元素,而 shift() 会从数组的开头移除一个元素。 pop() 和 shift() 与 push() 和 unshift() 的关键区别在于,用于删除元素的方法不接收参数,而且每次只能删除数组中的一个元素。
让我们来看以下的例子:
let greetings = ['whats up?', 'hello', 'see ya!'];
greetings.pop();
greetings 值为 ['whats up?', 'hello']
。
greetings.shift();
greetings 值为 ['hello']
。
这些用于删除数组元素的方法会返回被删除的元素:
let popped = greetings.pop();
greetings 值为 [],popped 值为 hello。
使用 splice() 删除元素
在之前的挑战中,我们已经学习了如何用 shift() 和 pop() 从数组的开头或末尾移除元素。 但如果我们想删除数组中间的一个元素, 或者想一次删除多个元素,该如何操作呢? 这时候我们就需要使用 splice() 方法了, splice() 可以让我们从数组中的任意位置连续删除任意数量的元素。
splice() 最多可以接受 3 个参数,但现在我们先关注前两个。 splice() 接收的前两个参数是整数,表示正在调用 的splice() 数组中的元素的索引或位置。 别忘了,数组的索引是从 0 开始的,所以我们要用 0 来表示数组中的第一个元素。 splice() 的第一个参数代表从数组中的哪个索引开始移除元素,而第二个参数表示要从数组中的这个位置开始删除多少个元素。 例如:
let array = ['today', 'was', 'not', 'so', 'great'];
array.splice(2, 2);
这里我们移除 2 个元素,首先是第三个元素(索引为 2)。 array 会有值 ['today', 'was', 'great']
。
splice() 不仅会修改调用该方法的数组,还会返回一个包含被移除元素的数组:
let array = ['I', 'am', 'feeling', 'really', 'happy'];
let newArray = array.splice(3, 2);
newArray 值为 ['really', 'happy']
。
使用 splice() 添加元素
还记得在上个挑战中我们提到 splice() 方法最多可以接收 3 个参数吗? 第三个参数可以是一个或多个元素,这些元素会被添加到数组中。 这样,我们能够便捷地将数组中的一个或多个连续元素换成其他的元素。
const numbers = [10, 11, 12, 12, 15];
const startIndex = 3