在 JavaScript 中,陣列是一種類似清單、長度不固定的結構,可以存放任何型別的基本型別或物件,甚至可以混用不同型別。
要建立陣列,請在方括號 [] 之間加入元素。
要從陣列中讀取資料,請把索引放在識別字後面的方括號 [] 裡。
陣列的索引從零開始。
例如:
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']
每個 Array 物件都能使用的一些方法,可以用來在陣列中新增或移除項目。 以下列出幾個在進行這個練習時可以考慮的方法:
使用.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 都允許你一次 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