Back
PQCHub

JavaScript 基礎 (II) – 複合資料型別:陣列與物件

學會陣列與物件,掌握資料分類與儲存。將零散資訊組合成結構化資料,為數據分析打下基礎。


1. 陣列 (Array)

1.1 為什麼需要 Array?

在資料科學裡,我們常常需要處理很多資料。 如果用單一變數會很麻煩:

let score1 = 85;
let score2 = 90;
let score3 = 78;
let score4 = 92;
let score5 = 87;

👉 當資料一多,就會變得很難管理。

這時候,我們就用 Array(陣列),它就像一個收納盒,可以依順序放很多資料。

let scores = [85, 90, 78, 92, 87];

1.2 建立 Array

在 JavaScript 裡,可以用 [] 來建立 Array:

let scores = [85, 90, 78];
console.log(scores);

輸出:

[ 85, 90, 78 ]

也可以建立其他類型的陣列:

let names = ["Alice", "Bob", "Carol"];
let mixed = [1, "hello", true, 3.14];

1.3 存取 Array 的元素

Array 的元素有編號 (index),從 0 開始

let scores = [85, 90, 78];
console.log(scores[0]); // 85
console.log(scores[1]); // 90
console.log(scores[2]); // 78

👉 記住:第一個元素的編號是 0,不是 1!


1.4 修改 Array

let scores = [85, 90, 78];
scores[1] = 95; // 把第 2 個元素改成 95
console.log(scores); // [ 85, 95, 78 ]

1.5 Array 的長度

let scores = [85, 90, 78, 92, 87];
console.log(scores.length); // 5

可以用 length 來存取最後一個元素:

console.log(scores[scores.length - 1]); // 87

1.6 常用 Array 方法

方法 功能 範例
push() 加到最後 scores.push(88)
pop() 移除最後 scores.pop()
shift() 移除最前面 scores.shift()
unshift() 加到最前面 scores.unshift(100)
indexOf() 找到元素位置 scores.indexOf(90)
includes() 檢查是否包含 scores.includes(85)

範例:

let scores = [85, 90];
scores.push(78);     // [85, 90, 78]
scores.unshift(100); // [100, 85, 90, 78]
scores.pop();        // [100, 85, 90]
console.log(scores.length); // 3

console.log(scores.indexOf(85)); // 1
console.log(scores.includes(90)); // true

1.7 陣列的複製與切片

let original = [1, 2, 3, 4, 5];
let copy = original.slice(); // 複製整個陣列
let part = original.slice(1, 4); // [2, 3, 4]

console.log(copy);    // [1, 2, 3, 4, 5]
console.log(part);    // [2, 3, 4]

1.8 常見錯誤與注意事項

小心陣列越界:

let scores = [85, 90, 78];
console.log(scores[5]); // undefined(不會報錯,但得到 undefined)

直接修改 length 的影響:

let arr = [1, 2, 3, 4, 5];
arr.length = 3;
console.log(arr); // [1, 2, 3](後面的元素被刪除了)

2. 物件 (Object)

2.1 為什麼需要 Object?

在資料科學裡,一筆資料往往有多個屬性(例如:姓名、年齡、分數)。 如果只用陣列,會變成這樣:

let student = ["Alice", 20, 85];

👉 問題:我們怎麼知道 20 是年齡,85 是分數? 這樣寫程式容易讓人混亂。

這時候就需要 Object(物件),它就像一個資料表的一列,每個欄位都有名字。


2.2 建立 Object

Object 用 {} 建立,裡面用 「屬性名: 值」 的方式表示:

let student = {
  name: "Alice",
  age: 20,
  score: 85
};
console.log(student);

輸出:

{ name: 'Alice', age: 20, score: 85 }

2.3 存取 Object 的屬性

有兩種方法可以存取屬性:

1. 點記號 (dot notation)

console.log(student.name);  // Alice
console.log(student.age);   // 20
console.log(student.score); // 85

2. 中括號記號 (bracket notation)

console.log(student["name"]);  // Alice
console.log(student["score"]); // 85

👉 中括號記號特別適合屬性名稱存在變數裡的時候:

let property = "age";
console.log(student[property]); // 20

2.4 修改 Object 的屬性

let student = {
  name: "Alice",
  age: 20,
  score: 85
};

student.age = 21;
student["score"] = 90;

console.log(student);
// { name: 'Alice', age: 21, score: 90 }

2.5 新增或刪除屬性

新增屬性:

student.major = "Computer Science";
student["email"] = "[email protected]";
console.log(student);
// { name: 'Alice', age: 21, score: 90, major: 'Computer Science', email: '[email protected]' }

刪除屬性:

delete student.age;
console.log(student);
// { name: 'Alice', score: 90, major: 'Computer Science', email: '[email protected]' }

2.6 檢查屬性是否存在

let student = {
  name: "Bob",
  score: 88
};

console.log("name" in student);  // true
console.log("age" in student);   // false
console.log(student.age);        // undefined

2.7 巢狀物件

物件裡面可以包含其他物件:

let student = {
  name: "Carol",
  personalInfo: {
    age: 19,
    city: "Taipei",
    phone: "0912-345-678"# JavaScript 基礎 (II) – 複合資料型別:陣列與物件



學會陣列與物件,掌握資料分類與儲存。將零散資訊組合成結構化資料,為數據分析打下基礎。

---


## 1 陣列 (Array) 

### 1.1 為什麼需要 Array?

在資料科學裡,我們常常需要處理很多資料。
如果用單一變數會很麻煩:

```js
let score1 = 85;
let score2 = 90;
let score3 = 78;

👉 當資料一多,就會變得很難管理。

這時候,我們就用 Array(陣列),它就像一個收納盒,可以依順序放很多資料。


1.2 建立 Array

在 JavaScript 裡,可以用 [] 來建立 Array:

let scores = [85, 90, 78];
console.log(scores);

輸出:

[ 85, 90, 78 ]

1.3 存取 Array 的元素

Array 的元素有編號 (index),從 0 開始

let scores = [85, 90, 78];
console.log(scores[0]); // 85
console.log(scores[1]); // 90
console.log(scores[2]); // 78

1.4 修改 Array

let scores = [85, 90, 78];
scores[1] = 95; // 把第 2 個元素改成 95
console.log(scores); // [ 85, 95, 78 ]

1.5 常用 Array 方法

方法 功能 範例
push() 加到最後 scores.push(88)
pop() 移除最後 scores.pop()
shift() 移除最前面 scores.shift()
unshift() 加到最前面 scores.unshift(100)
length 長度 scores.length

範例:

let scores = [85, 90];
scores.push(78);     // [85, 90, 78]
scores.unshift(100); // [100, 85, 90, 78]
scores.pop();        // [100, 85, 90]
console.log(scores.length); // 3

2 物件 (Object)

2.1 為什麼需要 Object?

在資料科學裡,一筆資料往往有多個屬性(例如:姓名、年齡、分數)。 如果只用陣列,會變成這樣:

let student = ["Alice", 20, 85];
console.log(student);

👉 問題:我們怎麼知道 20 是年齡,85 是分數? 這樣寫程式容易讓人混亂。

這時候就需要 Object(物件),它就像一個資料表的一列,每個欄位都有名字。


2.2 建立 Object

Object 用 {} 建立,裡面用 「屬性名: 值」 的方式表示。

let student = {
  name: "Alice",
  age: 20,
  score: 85
};
console.log(student);

輸出:

{ name: 'Alice', age: 20, score: 85 }

2.3 存取 Object 的屬性

有兩種方法可以存取屬性:

  1. 點記號 (dot notation)
console.log(student.name); // Alice
console.log(student.age);  // 20
  1. 中括號記號 (bracket notation) (特別適合屬性名稱存在變數裡時)
console.log(student["score"]); // 85

2.4 修改 Object 的屬性

student.age = 21;
student["score"] = 90;

console.log(student);
// { name: 'Alice', age: 21, score: 90 }

2.5 新增或刪除屬性

// 新增屬性
student.major = "Computer Science";
console.log(student);

// 刪除屬性
delete student.age;
console.log(student);

2.6 結合 Array 與 Object

在資料科學裡,我們常會需要處理多筆資料。 這時候,可以把 Object 放進 Array 裡:

let students = [
  { name: "Alice", age: 20, score: 85 },
  { name: "Bob",   age: 22, score: 90 },
  { name: "Carol", age: 19, score: 78 }
];

console.log(students[0]);      // { name: 'Alice', age: 20, score: 85 }
console.log(students[1].name); // Bob

3 陣列與物件的結合

在真實的資料科學應用裡,我們通常不會只用 Array 或只用 Object。 常見的情境是 Array 裝多筆 Object,或 Object 裡面有 Array


3.1 Array 裝 Object

這是最常見的:每一筆資料是一個物件,然後用陣列存放多筆。

let students = [
  { name: "Alice", age: 20, score: 85 },
  { name: "Bob",   age: 22, score: 90 },
  { name: "Carol", age: 19, score: 78 }
];

console.log(students[0]);        // { name: 'Alice', age: 20, score: 85 }
console.log(students[1].name);   // Bob
console.log(students[2].score);  // 78

👉 在這裡,students 是一個「資料表」,裡面有三筆「學生資料」。


3.2 Object 裝 Array

有時候,我們會想把同一類資料放在一起,例如一個學生有好幾次測驗分數。

let student = {
  name: "Alice",
  scores: [85, 90, 78]
};

console.log(student.name);       // Alice
console.log(student.scores);     // [85, 90, 78]
console.log(student.scores[1]);  // 90

👉 在這裡,scores 是一個陣列,代表 Alice 的多次測驗成績。


3.3 Array 裡的 Object,再包 Array

結合前兩種情境:多個學生,每個學生有多次測驗。

let students = [
  { name: "Alice", scores: [85, 90, 78] },
  { name: "Bob",   scores: [88, 92, 95] },
  { name: "Carol", scores: [70, 75, 80] }
];

console.log(students[0].name);       // Alice
console.log(students[0].scores[2]);  // 78
console.log(students[1].scores[0]);  // 88

👉 這樣就可以表示一個「班級」的成績清單。

3.4 Object 裡的 Object

有時候,一筆資料裡的欄位會更複雜,可以再用一個 Object 來描述。

let student = {
  name: "Alice",
  info: {
    age: 20,
    major: "Computer Science"
  }
};

console.log(student.name);       // Alice
console.log(student.info.age);   // 20
console.log(student.info.major); // Computer Science

3.5 混合練習:學生清單

綜合以上例子,我們可以用一個結構來表示多筆學生資料:

let students = [
  {
    name: "Alice",
    info: { age: 20, major: "CS" },
    scores: [85, 90, 78]
  },
  {
    name: "Bob",
    info: { age: 22, major: "Math" },
    scores: [88, 92, 95]
  }
];

console.log(students[0].info.major);  // CS
console.log(students[1].scores[2]);   // 95

👉 這樣的資料結構,已經非常接近「小型資料表格」的樣子。


}, academic: { major: "Mathematics", year: 2, gpa: 3.8 } };

console.log(student.name); // Carol console.log(student.personalInfo.age); // 19 console.log(student.academic.major); // Mathematics


---

### 2.8 物件的常見錯誤

**屬性名稱打錯:**
```js
let student = { name: "David", score: 95 };
console.log(student.scroe); // undefined(注意拼字錯誤)

忘記逗號分隔:

// 錯誤的寫法
let student = {
  name: "Eve"
  age: 20  // 缺少逗號會造成語法錯誤
};

正確的寫法:

let student = {
  name: "Eve",
  age: 20
};

3. 陣列與物件的結合

在真實的資料科學應用裡,我們通常會結合使用 Array 和 Object。

3.1 Array 裝 Object

這是最常見的情況:每一筆資料是一個物件,然後用陣列存放多筆資料。

let students = [
  { name: "Alice", age: 20, score: 85 },
  { name: "Bob",   age: 22, score: 90 },
  { name: "Carol", age: 19, score: 78 }
];

console.log(students[0]);        // { name: 'Alice', age: 20, score: 85 }
console.log(students[1].name);   // Bob
console.log(students[2].score);  // 78

👉 在這裡,students 就像一個「資料表」,裡面有三筆「學生資料」。


3.2 Object 裝 Array

有時候,我們會想把同一類的多個資料放在一起:

let student = {
  name: "Alice",
  testScores: [85, 90, 78, 92],
  subjects: ["Math", "English", "Science", "History"]
};

console.log(student.name);           // Alice
console.log(student.testScores);     // [85, 90, 78, 92]
console.log(student.testScores[1]);  // 90
console.log(student.subjects[0]);    // Math

👉 這裡 testScoressubjects 都是陣列,分別存放分數和科目。


3.3 複雜的巢狀結構

結合前面的概念,可以建立更複雜的資料結構:

let classroom = {
  className: "A",
  teacher: {
    name: "A老師",
    email: "[email protected]",
    subjects: ["程式設計", "資料結構"]
  },
  students: [
    {
      name: "B學生",
      info: { age: 19, major: "CS" },
      grades: [85, 90, 78]
    },
    {
      name: "C學生",
      info: { age: 20, major: "Math" },
      grades: [88, 92, 95]
    }
  ]
};

// 存取範例
console.log(classroom.teacher.name);           // A老師
console.log(classroom.students[0].name);       // B學生
console.log(classroom.students[1].grades[2]);  // 95

4. 除錯技巧

4.1 使用 console.table

對於陣列和物件,使用 console.table 可以更清楚地檢視資料:

let students = [
  { name: "Alice", score: 85 },
  { name: "Bob", score: 90 }
];

console.table(students);

4.2 檢查資料類型

console.log(typeof students);        // object
console.log(Array.isArray(students)); // true
console.log(Array.isArray(students[0])); // false

5.3 安全地存取巢狀屬性

// 不安全的寫法
// console.log(student.info.age); // 如果 info 不存在會出錯

// 較安全的寫法
if (student.info) {
  console.log(student.info.age);
}

6. 小結

通過這章的學習,你已經掌握了:

  • 陣列的建立、存取和操作
  • 物件的建立、屬性管理
  • 陣列與物件的結合使用
  • 巢狀資料結構的處理

SNPQ © 2025