在 JavaScript 中,数组是一种类似列表的结构,长度不固定,可以存放任意类型的原始值或对象,甚至可以在同一个数组里混用不同类型。
要创建数组,把元素写在方括号[]之间。
要从数组中读取元素,把下标写在标识符后面的方括号[]里。
数组的下标从 0 开始。
例如:
const numbers = [1, 'two', 3, 'four'];
numbers[2];
// => 3
要获取数组中元素的个数,可以使用length属性:
const numbers = [1, 'two', 3, 'four'];
numbers.length;
// => 4
要修改数组中的某个元素,给对应的下标赋值即可:
const numbers = [1, 'two', 3, 'four'];
numbers[0] = 'one';
numbers;
// => ['one', 'two', 3, 'four']
每个数组对象都可以使用一些方法,用它们可以往数组中添加元素或删除元素。 下面介绍几个完成本练习时可能用到的:
使用.push(value)可以把value_添加_到数组末尾。
该方法返回数组的新长度。
const numbers = [1, 'two', 3, 'four'];
numbers.push(5); // => 5
numbers;
// => [1, 'two', 3, 'four', 5]
使用.pop()可以把_最后一个_value从数组中_删除_。
该方法返回被删除的值。
这一改动会让数组的长度减少。
const numbers = [1, 'two', 3, 'four'];
numbers.pop(); // => four
numbers;
// => [1, 'two', 3]
使用.shift()可以把_第一个_value从数组中_删除_。
该方法返回被删除的值。
这一改动会让数组的长度减少。
const numbers = [1, 'two', 3, 'four'];
numbers.shift(); // => 1
numbers;
// => ['two', 3, 'four']
使用.unshift(value)可以把value_添加_到数组开头。
该方法返回数组的新长度。
const numbers = [1, 'two', 3, 'four'];
numbers.unshift('one'); // => 5
numbers;
// => ['one', 1, 'two', 3, 'four']
使用.splice(index, 1)可以把数组中指定index处的value删除。
该方法返回被删除的元素。
const numbers = [1, 'two', 3, 'four'];
numbers.splice(2, 1, 'one'); // => [3]
numbers;
// => [1, 'two', 'one', 'four']
这些方法比上面介绍的更强大:
push和unshift都允许一次推入或插入多个值,只需添加更多的实参。
完成本练习并不需要这样做。deleteCount之后。
这样就可以替换值,或者在数组中间插入值(例如删除 0 个元素)。
完成本练习并不需要这样做。作为一名准魔术师,Elyse 需要练习一些基本功。她有一叠牌,想要对它们进行各种操作。
为了方便起见,她只用 1 到 10 的牌,因此这叠牌可以用一个数字数组来表示。某张牌的位置对应数组中的下标。也就是说,位置 0 指的是第一张牌,位置 1 是第二张牌,依此类推。
除了两个函数之外,其他函数都应该先更新牌堆数组,然后返回修改后的数组。这种常见的工作方式叫作 Builder 模式,它让你能够优雅地把函数像链子一样串起来。
两个例外是 getItem,它应该返回指定位置上的牌;以及 checkSizeOfStack,如果给定的大小相符,它应该返回 true。
要取出一张牌,请返回给定牌堆中下标为 position 的那张牌。
const position = 2;
getItem([1, 2, 4, 1], position);
// => 4
施展一点手法,把下标为 position 的那张牌换成提供的替换牌。
返回调整后的牌堆。
const position = 2;
const replacementCard = 6;
setItem([1, 2, 4, 1], position, replacementCard);
// => [1, 2, 6, 1]
在牌堆顶部插入一张新牌,让一张牌出现。 返回调整后的牌堆。
const newCard = 8;
insertItemAtTop([5, 9, 7, 1], newCard);
// => [5, 9, 7, 1, 8]
从牌堆中移除给定 position 上的那张牌,让一张牌消失。
返回调整后的牌堆。
const position = 2;
removeItem([3, 2, 6, 4, 8], position);
// => [3, 2, 4, 8]
移除牌堆顶部的那张牌,让一张牌消失。 返回调整后的牌堆。
removeItemFromTop([3, 2, 6, 4, 8]);
// => [3, 2, 6, 4]
在牌堆底部插入一张新牌,让一张牌出现。 返回调整后的牌堆。
const newCard = 8;
insertItemAtBottom([5, 9, 7, 1], newCard);
// => [8, 5, 9, 7, 1]
移除牌堆底部的那张牌,让一张牌消失。 返回调整后的牌堆。
removeItemAtBottom([8, 5, 9, 7, 1]);
// => [5, 9, 7, 1]
检查牌堆的大小是否等于 stackSize。
const stackSize = 4;
checkSizeOfStack([3, 2, 6, 4, 8], stackSize);
// => false