
Javascript Day5 陣列 Array
什麼是陣列?
陣列(Array)是用來存放一組資料的容器。想像你有一排櫃子,每個櫃子都有一個編號(index),裡面可以放東西。
javascript
// 建立一個陣列
let fruits = ['蘋果', '香蕉', '橘子']建立陣列
javascript
// 字面量建立(最常用)
let arr1 = [1, 2, 3]
// 建構函式建立
let arr2 = new Array(1, 2, 3)
// 空陣列
let arr3 = []⚠️ 注意
陣列的 index 從 0 開始!第一個元素是 arr[0],不是 arr[1]。
存取元素
javascript
let colors = ['紅', '黃', '藍']
console.log(colors[0]) // '紅'
console.log(colors[1]) // '黃'
console.log(colors[2]) // '藍'
console.log(colors[3]) // undefined(超出範圍)常用屬性
| 屬性 | 說明 | 範例 |
|---|---|---|
length | 陣列長度 | colors.length → 3 |
新增與刪除元素
push / pop(尾端操作)
javascript
let stack = [1, 2, 3]
stack.push(4) // 尾端加入 4 → [1, 2, 3, 4]
console.log(stack)
stack.pop() // 尾端移除 → [1, 2, 3]
console.log(stack)unshift / shift(前端操作)
javascript
let queue = [1, 2, 3]
queue.unshift(0) // 前端加入 0 → [0, 1, 2, 3]
console.log(queue)
queue.shift() // 前端移除 → [1, 2, 3]
console.log(queue)記憶口訣
- Push / Pop = 後進後出(像疊盤子)
- Unshift / Shift = 前進前出(像排隊)
遍歷陣列
for 迴圈
javascript
let nums = [10, 20, 30]
for (let i = 0; i < nums.length; i++) {
console.log(`索引 ${i}: ${nums[i]}`)
}
// 索引 0: 10
// 索引 1: 20
// 索引 2: 30for...of(推薦)
javascript
let nums = [10, 20, 30]
for (let num of nums) {
console.log(num)
}
// 10
// 20
// 30forEach
javascript
let nums = [10, 20, 30]
nums.forEach((num, index) => {
console.log(`索引 ${index}: ${num}`)
})重要方法
map — 轉換每個元素
回傳一個新陣列,每個元素都經過處理。
javascript
let numbers = [1, 2, 3, 4, 5]
let doubled = numbers.map(n => n * 2)
console.log(doubled) // [2, 4, 6, 8, 10]filter — 篩選元素
回傳一個新陣列,只包含符合條件的元素。
javascript
let numbers = [1, 2, 3, 4, 5, 6]
let evens = numbers.filter(n => n % 2 === 0)
console.log(evens) // [2, 4, 6]reduce — 累加計算
將陣列縮減成一個值。
javascript
let numbers = [1, 2, 3, 4, 5]
let sum = numbers.reduce((accumulator, current) => {
return accumulator + current
}, 0)
console.log(sum) // 15find — 找到第一個符合的元素
javascript
let users = [
{ name: 'Alice', age: 25 },
{ name: 'Bob', age: 17 },
{ name: 'Charlie', age: 30 }
]
let minor = users.find(user => user.age < 18)
console.log(minor) // { name: 'Bob', age: 17 }includes — 是否包含某值
javascript
let fruits = ['蘋果', '香蕉', '橘子']
console.log(fruits.includes('香蕉')) // true
console.log(fruits.includes('西瓜')) // falseindexOf — 找到元素的索引
javascript
let fruits = ['蘋果', '香蕉', '橘子']
console.log(fruits.indexOf('香蕉')) // 1
console.log(fruits.indexOf('西瓜')) // -1(找不到)方法比較
| 方法 | 回傳值 | 是否改變原陣列 |
|---|---|---|
push() | 新的 length | ✅ 會 |
pop() | 被移除的元素 | ✅ 會 |
map() | 新陣列 | ❌ 不會 |
filter() | 新陣列 | ❌ 不會 |
reduce() | 單一值 | ❌ 不會 |
find() | 元素或 undefined | ❌ 不會 |
includes() | true / false | ❌ 不會 |
牛刀小試
建立一個數字陣列
[1, 2, 3, 4, 5],用map將每個數字平方,得到[1, 4, 9, 16, 25]建立一個數字陣列
[10, 15, 20, 25, 30],用filter篩選出大於 20 的數字建立一個數字陣列
[1, 2, 3, 4, 5],用reduce計算所有數字的乘積建立一個字串陣列
['hello', 'world', 'javascript'],用map將每個字串轉成大寫
看答案
Q1
javascript
let nums = [1, 2, 3, 4, 5]
let squared = nums.map(n => n * n)
console.log(squared) // [1, 4, 9, 16, 25]Q2
javascript
let nums = [10, 15, 20, 25, 30]
let big = nums.filter(n => n > 20)
console.log(big) // [25, 30]Q3
javascript
let nums = [1, 2, 3, 4, 5]
let product = nums.reduce((acc, cur) => acc * cur, 1)
console.log(product) // 120Q4
javascript
let words = ['hello', 'world', 'javascript']
let upper = words.map(w => w.toUpperCase())
console.log(upper) // ['HELLO', 'WORLD', 'JAVASCRIPT']