You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Web-Dev-For-Beginners/translations/vi/2-js-basics/4-arrays-loops/README.md

32 KiB

Cơ bản về JavaScript: Mảng và Vòng lặp

Cơ bản về JavaScript - Mảng

Sketchnote bởi Tomomi Imura

journey
    title Your Arrays & Loops Adventure
    section Array Fundamentals
      Creating Arrays: 5: You
      Accessing Elements: 4: You
      Array Methods: 5: You
    section Loop Mastery
      For Loops: 4: You
      While Loops: 5: You
      Modern Syntax: 4: You
    section Data Processing
      Array + Loops: 5: You
      Real-world Applications: 4: You
      Performance Optimization: 5: You

Quiz trước bài học

Quiz trước bài học

Bạn đã bao giờ tự hỏi làm thế nào các trang web theo dõi các mặt hàng trong giỏ hàng hoặc hiển thị danh sách bạn bè của bạn chưa? Đó chính là lúc mảng và vòng lặp xuất hiện. Mảng giống như những chiếc hộp kỹ thuật số chứa nhiều thông tin, trong khi vòng lặp giúp bạn xử lý tất cả dữ liệu đó một cách hiệu quả mà không cần viết mã lặp đi lặp lại.

Hai khái niệm này cùng nhau tạo nền tảng cho việc xử lý thông tin trong chương trình của bạn. Bạn sẽ học cách chuyển từ việc viết từng bước một cách thủ công sang tạo mã thông minh, hiệu quả có thể xử lý hàng trăm hoặc thậm chí hàng nghìn mục một cách nhanh chóng.

Kết thúc bài học này, bạn sẽ hiểu cách thực hiện các nhiệm vụ dữ liệu phức tạp chỉ với vài dòng mã. Hãy cùng khám phá những khái niệm lập trình thiết yếu này.

Mảng

Vòng lặp

🎥 Nhấp vào hình ảnh trên để xem video về mảng và vòng lặp.

Bạn có thể học bài này trên Microsoft Learn!

mindmap
  root((Data Processing))
    Arrays
      Structure
        Square brackets syntax
        Zero-based indexing
        Dynamic sizing
      Operations
        push/pop
        shift/unshift
        indexOf/includes
      Types
        Numbers array
        Strings array
        Mixed types
    Loops
      For Loops
        Counting iterations
        Array processing
        Predictable flow
      While Loops
        Condition-based
        Unknown iterations
        User input
      Modern Syntax
        for...of
        forEach
        Functional methods
    Applications
      Data Analysis
        Statistics
        Filtering
        Transformations
      User Interfaces
        Lists
        Menus
        Galleries

Mảng

Hãy nghĩ về mảng như một tủ hồ sơ kỹ thuật số - thay vì lưu trữ một tài liệu mỗi ngăn, bạn có thể tổ chức nhiều mục liên quan trong một hộp chứa có cấu trúc. Trong thuật ngữ lập trình, mảng cho phép bạn lưu trữ nhiều thông tin trong một gói được tổ chức.

Dù bạn đang xây dựng một thư viện ảnh, quản lý danh sách việc cần làm, hay theo dõi điểm cao trong một trò chơi, mảng cung cấp nền tảng cho việc tổ chức dữ liệu. Hãy xem cách chúng hoạt động.

Mảng có mặt khắp nơi! Bạn có thể nghĩ ra một ví dụ thực tế về mảng, chẳng hạn như một mảng pin mặt trời không?

Tạo mảng

Tạo một mảng rất đơn giản - chỉ cần sử dụng dấu ngoặc vuông!

// Empty array - like an empty shopping cart waiting for items
const myArray = [];

Điều gì đang xảy ra ở đây? Bạn vừa tạo một hộp chứa rỗng bằng cách sử dụng dấu ngoặc vuông []. Hãy nghĩ về nó như một kệ sách trống - nó sẵn sàng chứa bất kỳ cuốn sách nào bạn muốn tổ chức ở đó.

Bạn cũng có thể điền giá trị ban đầu vào mảng ngay từ đầu:

// Your ice cream shop's flavor menu
const iceCreamFlavors = ["Chocolate", "Strawberry", "Vanilla", "Pistachio", "Rocky Road"];

// A user's profile info (mixing different types of data)
const userData = ["John", 25, true, "developer"];

// Test scores for your favorite class
const scores = [95, 87, 92, 78, 85];

Những điều thú vị cần chú ý:

  • Bạn có thể lưu trữ văn bản, số, hoặc thậm chí giá trị đúng/sai trong cùng một mảng
  • Chỉ cần tách từng mục bằng dấu phẩy - thật dễ dàng!
  • Mảng rất lý tưởng để giữ thông tin liên quan cùng nhau
flowchart LR
    A["📦 Arrays"] --> B["Create [ ]"]
    A --> C["Store Multiple Items"]
    A --> D["Access by Index"]
    
    B --> B1["const arr = []"]
    B --> B2["const arr = [1,2,3]"]
    
    C --> C1["Numbers"]
    C --> C2["Strings"]
    C --> C3["Booleans"]
    C --> C4["Mixed Types"]
    
    D --> D1["arr[0] = first"]
    D --> D2["arr[1] = second"]
    D --> D3["arr[2] = third"]
    
    E["📊 Array Index"] --> E1["Index 0: First"]
    E --> E2["Index 1: Second"]
    E --> E3["Index 2: Third"]
    E --> E4["Index n-1: Last"]
    
    style A fill:#e3f2fd
    style B fill:#e8f5e8
    style C fill:#fff3e0
    style D fill:#f3e5f5
    style E fill:#e0f2f1

Chỉ số mảng

Đây là điều có thể ban đầu sẽ hơi lạ: mảng đánh số các mục của chúng bắt đầu từ 0, không phải 1. Cách đánh số từ 0 này bắt nguồn từ cách bộ nhớ máy tính hoạt động - nó đã trở thành một quy ước lập trình từ những ngày đầu của các ngôn ngữ như C. Mỗi vị trí trong mảng có một số địa chỉ riêng gọi là chỉ số.

Chỉ số Giá trị Mô tả
0 "Chocolate" Phần tử đầu tiên
1 "Strawberry" Phần tử thứ hai
2 "Vanilla" Phần tử thứ ba
3 "Pistachio" Phần tử thứ tư
4 "Rocky Road" Phần tử thứ năm

Có làm bạn ngạc nhiên khi mảng bắt đầu từ chỉ số 0 không? Trong một số ngôn ngữ lập trình, chỉ số bắt đầu từ 1. Có một lịch sử thú vị về điều này, bạn có thể đọc trên Wikipedia.

Truy cập các phần tử mảng:

const iceCreamFlavors = ["Chocolate", "Strawberry", "Vanilla", "Pistachio", "Rocky Road"];

// Access individual elements using bracket notation
console.log(iceCreamFlavors[0]); // "Chocolate" - first element
console.log(iceCreamFlavors[2]); // "Vanilla" - third element
console.log(iceCreamFlavors[4]); // "Rocky Road" - last element

Phân tích điều gì xảy ra ở đây:

  • Sử dụng ký hiệu ngoặc vuông với số chỉ số để truy cập các phần tử
  • Trả về giá trị được lưu trữ tại vị trí cụ thể trong mảng
  • Bắt đầu đếm từ 0, làm cho phần tử đầu tiên có chỉ số 0

Thay đổi các phần tử mảng:

// Change an existing value
iceCreamFlavors[4] = "Butter Pecan";
console.log(iceCreamFlavors[4]); // "Butter Pecan"

// Add a new element at the end
iceCreamFlavors[5] = "Cookie Dough";
console.log(iceCreamFlavors[5]); // "Cookie Dough"

Trong ví dụ trên, chúng ta đã:

  • Thay đổi phần tử tại chỉ số 4 từ "Rocky Road" thành "Butter Pecan"
  • Thêm một phần tử mới "Cookie Dough" tại chỉ số 5
  • Tự động mở rộng độ dài mảng khi thêm vượt quá giới hạn hiện tại

Độ dài mảng và các phương thức phổ biến

Mảng đi kèm với các thuộc tính và phương thức tích hợp giúp làm việc với dữ liệu dễ dàng hơn.

Tìm độ dài mảng:

const iceCreamFlavors = ["Chocolate", "Strawberry", "Vanilla", "Pistachio", "Rocky Road"];
console.log(iceCreamFlavors.length); // 5

// Length updates automatically as array changes
iceCreamFlavors.push("Mint Chip");
console.log(iceCreamFlavors.length); // 6

Những điểm chính cần nhớ:

  • Trả về tổng số phần tử trong mảng
  • Cập nhật tự động khi các phần tử được thêm hoặc xóa
  • Cung cấp số đếm động hữu ích cho vòng lặp và xác thực

Các phương thức mảng thiết yếu:

const fruits = ["apple", "banana", "orange"];

// Add elements
fruits.push("grape");           // Adds to end: ["apple", "banana", "orange", "grape"]
fruits.unshift("strawberry");   // Adds to beginning: ["strawberry", "apple", "banana", "orange", "grape"]

// Remove elements
const lastFruit = fruits.pop();        // Removes and returns "grape"
const firstFruit = fruits.shift();     // Removes and returns "strawberry"

// Find elements
const index = fruits.indexOf("banana"); // Returns 1 (position of "banana")
const hasApple = fruits.includes("apple"); // Returns true

Hiểu các phương thức này:

  • Thêm phần tử với push() (cuối) và unshift() (đầu)
  • Xóa phần tử với pop() (cuối) và shift() (đầu)
  • Tìm phần tử với indexOf() và kiểm tra sự tồn tại với includes()
  • Trả về các giá trị hữu ích như phần tử đã xóa hoặc vị trí chỉ số

Thử tự mình! Sử dụng bảng điều khiển trình duyệt để tạo và thao tác một mảng do bạn tự tạo.

🧠 Kiểm tra kiến thức cơ bản về mảng: Tổ chức dữ liệu của bạn

Kiểm tra hiểu biết về mảng:

  • Tại sao bạn nghĩ mảng bắt đầu đếm từ 0 thay vì 1?
  • Điều gì xảy ra nếu bạn cố gắng truy cập một chỉ số không tồn tại (như arr[100] trong một mảng có 5 phần tử)?
  • Bạn có thể nghĩ ra ba tình huống thực tế mà mảng sẽ hữu ích không?
stateDiagram-v2
    [*] --> EmptyArray: const arr = []
    EmptyArray --> WithItems: Add elements
    WithItems --> Accessing: Use indexes
    Accessing --> Modifying: Change values
    Modifying --> Processing: Use methods
    
    WithItems --> WithItems: push(), unshift()
    Processing --> Processing: pop(), shift()
    
    note right of Accessing
        Zero-based indexing
        arr[0] = first element
    end note
    
    note right of Processing
        Built-in methods
        Dynamic operations
    end note

Thông tin thực tế: Mảng có mặt khắp nơi trong lập trình! Dòng tin trên mạng xã hội, giỏ hàng, thư viện ảnh, danh sách bài hát - tất cả đều là mảng phía sau!

Vòng lặp

Hãy nghĩ về hình phạt nổi tiếng trong các tiểu thuyết của Charles Dickens, nơi học sinh phải viết đi viết lại một câu trên bảng. Hãy tưởng tượng nếu bạn có thể chỉ cần yêu cầu ai đó "viết câu này 100 lần" và nó được thực hiện tự động. Đó chính xác là những gì vòng lặp làm cho mã của bạn.

Vòng lặp giống như có một trợ lý không biết mệt mỏi, có thể lặp lại các nhiệm vụ mà không mắc lỗi. Dù bạn cần kiểm tra từng mục trong giỏ hàng hay hiển thị tất cả ảnh trong một album, vòng lặp xử lý sự lặp lại một cách hiệu quả.

JavaScript cung cấp nhiều loại vòng lặp để bạn lựa chọn. Hãy cùng xem xét từng loại và hiểu khi nào nên sử dụng chúng.

flowchart TD
    A["🔄 Loop Types"] --> B["For Loop"]
    A --> C["While Loop"]
    A --> D["For...of Loop"]
    A --> E["forEach Method"]
    
    B --> B1["Known iterations"]
    B --> B2["Counter-based"]
    B --> B3["for(init; condition; increment)"]
    
    C --> C1["Unknown iterations"]
    C --> C2["Condition-based"]
    C --> C3["while(condition)"]
    
    D --> D1["Modern ES6+"]
    D --> D2["Array iteration"]
    D --> D3["for(item of array)"]
    
    E --> E1["Functional style"]
    E --> E2["Array method"]
    E --> E3["array.forEach(callback)"]
    
    F["⏰ When to Use"] --> F1["For: Counting, indexes"]
    F --> F2["While: User input, searching"]
    F --> F3["For...of: Simple iteration"]
    F --> F4["forEach: Functional programming"]
    
    style A fill:#e3f2fd
    style B fill:#e8f5e8
    style C fill:#fff3e0
    style D fill:#f3e5f5
    style E fill:#e0f2f1
    style F fill:#fce4ec

Vòng lặp For

Vòng lặp for giống như đặt một bộ hẹn giờ - bạn biết chính xác số lần bạn muốn điều gì đó xảy ra. Nó rất có tổ chức và dễ dự đoán, điều này làm cho nó trở nên hoàn hảo khi bạn làm việc với mảng hoặc cần đếm số lượng.

Cấu trúc vòng lặp For:

Thành phần Mục đích Ví dụ
Khởi tạo Đặt điểm bắt đầu let i = 0
Điều kiện Khi nào tiếp tục i < 10
Tăng Cách cập nhật i++
// Counting from 0 to 9
for (let i = 0; i < 10; i++) {
  console.log(`Count: ${i}`);
}

// More practical example: processing scores
const testScores = [85, 92, 78, 96, 88];
for (let i = 0; i < testScores.length; i++) {
  console.log(`Student ${i + 1}: ${testScores[i]}%`);
}

Từng bước, đây là điều gì đang xảy ra:

  • Khởi tạo biến đếm i thành 0 lúc bắt đầu
  • Kiểm tra điều kiện i < 10 trước mỗi lần lặp
  • Thực thi khối mã khi điều kiện đúng
  • Tăng i thêm 1 sau mỗi lần lặp với i++
  • Dừng khi điều kiện trở thành sai (khi i đạt đến 10)

Chạy đoạn mã này trong bảng điều khiển trình duyệt. Điều gì xảy ra khi bạn thực hiện các thay đổi nhỏ đối với biến đếm, điều kiện, hoặc biểu thức lặp? Bạn có thể làm cho nó chạy ngược lại, tạo một đếm ngược không?

🗓️ Kiểm tra sự thành thạo vòng lặp For: Lặp lại có kiểm soát

Đánh giá hiểu biết về vòng lặp For:

  • Ba phần của vòng lặp For là gì, và mỗi phần làm gì?
  • Làm thế nào để bạn lặp qua một mảng ngược lại?
  • Điều gì xảy ra nếu bạn quên phần tăng (i++)?
flowchart TD
    A["🚀 Start For Loop"] --> B["Initialize: let i = 0"]
    B --> C{"Condition: i < array.length?"}
    C -->|true| D["Execute code block"]
    D --> E["Increment: i++"]
    E --> C
    C -->|false| F["✅ Exit loop"]
    
    G["📋 Common Patterns"] --> G1["for(let i=0; i<n; i++)"]
    G --> G2["for(let i=n-1; i>=0; i--)"]
    G --> G3["for(let i=0; i<arr.length; i+=2)"]
    
    style A fill:#e3f2fd
    style F fill:#e8f5e8
    style G fill:#fff3e0

Sự khôn ngoan về vòng lặp: Vòng lặp For rất phù hợp khi bạn biết chính xác số lần bạn cần lặp lại điều gì đó. Đây là lựa chọn phổ biến nhất để xử lý mảng!

Vòng lặp While

Vòng lặp while giống như nói "tiếp tục làm điều này cho đến khi..." - bạn có thể không biết chính xác số lần nó sẽ chạy, nhưng bạn biết khi nào nên dừng. Nó rất phù hợp cho những việc như yêu cầu người dùng nhập liệu cho đến khi họ cung cấp đúng thông tin, hoặc tìm kiếm dữ liệu cho đến khi bạn tìm thấy điều bạn cần.

Đặc điểm của vòng lặp While:

  • Tiếp tục thực thi miễn là điều kiện đúng
  • Yêu cầu quản lý thủ công các biến đếm
  • Kiểm tra điều kiện trước mỗi lần lặp
  • Có nguy cơ vòng lặp vô hạn nếu điều kiện không bao giờ trở thành sai
// Basic counting example
let i = 0;
while (i < 10) {
  console.log(`While count: ${i}`);
  i++; // Don't forget to increment!
}

// More practical example: processing user input
let userInput = "";
let attempts = 0;
const maxAttempts = 3;

while (userInput !== "quit" && attempts < maxAttempts) {
  userInput = prompt(`Enter 'quit' to exit (attempt ${attempts + 1}):`);
  attempts++;
}

if (attempts >= maxAttempts) {
  console.log("Maximum attempts reached!");
}

Hiểu các ví dụ này:

  • Quản lý biến đếm i thủ công bên trong thân vòng lặp
  • Tăng biến đếm để tránh vòng lặp vô hạn
  • Thể hiện trường hợp sử dụng thực tế với đầu vào người dùng và giới hạn số lần thử
  • Bao gồm cơ chế an toàn để tránh thực thi vô tận

♾️ Kiểm tra sự khôn ngoan về vòng lặp While: Lặp lại dựa trên điều kiện

Kiểm tra hiểu biết về vòng lặp While:

  • Nguy cơ chính khi sử dụng vòng lặp While là gì?
  • Khi nào bạn sẽ chọn vòng lặp While thay vì vòng lặp For?
  • Làm thế nào để bạn tránh vòng lặp vô hạn?
flowchart LR
    A["🔄 While vs For"] --> B["While Loop"]
    A --> C["For Loop"]
    
    B --> B1["Unknown iterations"]
    B --> B2["Condition-driven"]
    B --> B3["User input, searching"]
    B --> B4["⚠️ Risk: infinite loops"]
    
    C --> C1["Known iterations"]
    C --> C2["Counter-driven"]
    C --> C3["Array processing"]
    C --> C4["✅ Safe: predictable end"]
    
    D["🛡️ Safety Tips"] --> D1["Always modify condition variable"]
    D --> D2["Include escape conditions"]
    D --> D3["Set maximum iteration limits"]
    
    style A fill:#e3f2fd
    style B fill:#fff3e0
    style C fill:#e8f5e8
    style D fill:#ffebee

An toàn là trên hết: Vòng lặp While rất mạnh mẽ nhưng yêu cầu quản lý điều kiện cẩn thận. Luôn đảm bảo điều kiện vòng lặp của bạn cuối cùng sẽ trở thành sai!

Các lựa chọn thay thế vòng lặp hiện đại

JavaScript cung cấp cú pháp vòng lặp hiện đại có thể làm cho mã của bạn dễ đọc hơn và ít lỗi hơn.

Vòng lặp For...of (ES6+):

const colors = ["red", "green", "blue", "yellow"];

// Modern approach - cleaner and safer
for (const color of colors) {
  console.log(`Color: ${color}`);
}

// Compare with traditional for loop
for (let i = 0; i < colors.length; i++) {
  console.log(`Color: ${colors[i]}`);
}

Ưu điểm chính của For...of:

  • Loại bỏ việc quản lý chỉ số và các lỗi tiềm ẩn
  • Cung cấp quyền truy cập trực tiếp vào các phần tử mảng
  • Cải thiện khả năng đọc mã và giảm độ phức tạp cú pháp

Phương thức forEach:

const prices = [9.99, 15.50, 22.75, 8.25];

// Using forEach for functional programming style
prices.forEach((price, index) => {
  console.log(`Item ${index + 1}: $${price.toFixed(2)}`);
});

// forEach with arrow functions for simple operations
prices.forEach(price => console.log(`Price: $${price}`));

Những điều bạn cần biết về forEach:

  • Thực thi một hàm cho mỗi phần tử mảng
  • Cung cấp cả giá trị phần tử và chỉ số làm tham số
  • Không thể dừng sớm (khác với vòng lặp truyền thống)
  • Trả về undefined (không tạo mảng mới)

Tại sao bạn chọn vòng lặp For thay vì vòng lặp While? 17K người xem đã có cùng câu hỏi trên StackOverflow, và một số ý kiến có thể thú vị với bạn.

🎨 Kiểm tra cú pháp vòng lặp hiện đại: Áp dụng ES6+

Đánh giá hiểu biết về JavaScript hiện đại:

  • Những ưu điểm của for...of so với vòng lặp For truyền thống là gì?
  • Khi nào bạn vẫn thích vòng lặp For truyền thống?
  • Sự khác biệt giữa forEachmap là gì?
quadrantChart
    title Loop Selection Guide
    x-axis Traditional --> Modern
    y-axis Simple --> Complex
    quadrant-1 Modern Complex
    quadrant-2 Traditional Complex
    quadrant-3 Traditional Simple
    quadrant-4 Modern Simple
    
    Traditional For: [0.2, 0.7]
    While Loop: [0.3, 0.6]
    For...of: [0.8, 0.3]
    forEach: [0.9, 0.4]
    Array Methods: [0.8, 0.8]

Xu hướng hiện đại: Cú pháp ES6+ như for...offorEach đang trở thành cách tiếp cận ưu tiên để lặp qua mảng vì nó sạch sẽ và ít lỗi hơn!

Vòng lặp và Mảng

Kết hợp mảng với vòng lặp tạo ra khả năng xử lý dữ liệu mạnh mẽ. Sự kết hợp này là nền tảng cho nhiều nhiệm vụ lập trình, từ hiển thị danh sách đến tính toán thống kê.

Xử lý mảng truyền thống:

const iceCreamFlavors = ["Chocolate", "Strawberry", "Vanilla", "Pistachio", "Rocky Road"];

// Classic for loop approach
for (let i = 0; i < iceCreamFlavors.length; i++) {
  console.log(`Flavor ${i + 1}: ${iceCreamFlavors[i]}`);
}

// Modern for...of approach
for (const flavor of iceCreamFlavors) {
  console.log(`Available flavor: ${flavor}`);
}

Hãy hiểu từng cách tiếp cận:

  • Sử dụng thuộc tính độ dài mảng để xác định giới hạn vòng lặp
  • Truy cập các phần tử theo chỉ số trong vòng lặp For truyền thống
  • Cung cấp quyền truy cập trực tiếp vào phần tử trong vòng lặp For...of
  • Xử lý từng phần tử mảng chính xác một lần

Ví dụ xử lý dữ liệu thực tế:

const studentGrades = [85, 92, 78, 96, 88, 73, 89];
let total = 0;
let highestGrade = studentGrades[0];
let lowestGrade = studentGrades[0];

// Process all grades with a single loop
for (let i = 0; i < studentGrades.length; i++) {
  const grade = studentGrades[i];
  total += grade;
  
  if (grade > highestGrade) {
    highestGrade = grade;
  }
  
  if (grade < lowestGrade) {
    lowestGrade = grade;
  }
}

const average = total / studentGrades.length;
console.log(`Average: ${average.toFixed(1)}`);
console.log(`Highest: ${highestGrade}`);
console.log(`Lowest: ${lowestGrade}`);

Đây là cách mã này hoạt động:

  • Khởi tạo các biến theo dõi cho tổng và giá trị cực đại
  • Xử lý từng điểm số với một vòng lặp hiệu quả duy nhất
  • Tích lũy tổng để tính trung bình
  • Theo dõi giá trị cao nhất và thấp nhất trong quá trình lặp
  • Tính toán thống kê cuối cùng sau khi hoàn thành vòng lặp

Thử nghiệm lặp qua một mảng do bạn tự tạo trong bảng điều khiển trình duyệt.

flowchart TD
    A["📦 Array Data"] --> B["🔄 Loop Processing"]
    B --> C["📈 Results"]
    
    A1["[85, 92, 78, 96, 88]"] --> A
    
    B --> B1["Calculate total"]
    B --> B2["Find min/max"]
    B --> B3["Count conditions"]
    B --> B4["Transform data"]
    
    C --> C1["Average: 87.8"]
    C --> C2["Highest: 96"]
    C --> C3["Passing: 5/5"]
    C --> C4["Letter grades"]
    
    D["⚡ Processing Patterns"] --> D1["Accumulation (sum)"]
    D --> D2["Comparison (min/max)"]
    D --> D3["Filtering (conditions)"]
    D --> D4["Mapping (transformation)"]
    
    style A fill:#e3f2fd
    style B fill:#fff3e0
    style C fill:#e8f5e8
    style D fill:#f3e5f5

Thử thách GitHub Copilot Agent 🚀

Sử dụng chế độ Agent để hoàn thành thử thách sau:

Mô tả: Xây dựng một hàm xử lý dữ liệu toàn diện kết hợp mảng và vòng lặp để phân tích một tập dữ liệu và tạo ra những thông tin chi tiết có ý nghĩa.

Yêu cầu: Tạo một hàm có tên analyzeGrades nhận một mảng các đối tượng điểm số học sinh (mỗi đối tượng chứa thuộc tính tên và điểm số) và trả về một đối tượng với các thống kê bao gồm điểm cao nhất, điểm thấp nhất, điểm trung bình, số lượng học sinh đạt (điểm >= 70), và một mảng tên học sinh có điểm trên trung bình. Sử dụng ít nhất hai loại vòng lặp khác nhau trong giải pháp của bạn.

Tìm hiểu thêm về chế độ agent tại đây.

🚀 Thử thách

JavaScript cung cấp một số phương thức mảng hiện đại có thể thay thế các vòng lặp truyền thống cho các nhiệm vụ cụ thể. Khám phá forEach, for-of, map, filter, và reduce.

Thử thách của bạn: Viết lại ví dụ về điểm số học sinh bằng cách sử dụng ít nhất ba phương thức mảng khác nhau. Hãy chú ý xem mã trở nên sạch sẽ và dễ đọc hơn bao nhiêu với cú pháp JavaScript hiện đại.

Câu hỏi sau bài học

Câu hỏi sau bài học

Ôn tập & Tự học

Các mảng trong JavaScript có nhiều phương thức đi kèm, rất hữu ích cho việc xử lý dữ liệu. Tìm hiểu về các phương thức này và thử một số phương thức (như push, pop, slice và splice) trên một mảng do bạn tạo ra.

Bài tập

Loop an Array


📊 Tóm tắt công cụ Mảng & Vòng lặp của bạn

graph TD
    A["🎯 Arrays & Loops Mastery"] --> B["📦 Array Fundamentals"]
    A --> C["🔄 Loop Types"]
    A --> D["🔗 Data Processing"]
    A --> E["🎨 Modern Techniques"]
    
    B --> B1["Creation: [ ]"]
    B --> B2["Indexing: arr[0]"]
    B --> B3["Methods: push, pop"]
    B --> B4["Properties: length"]
    
    C --> C1["For: Known iterations"]
    C --> C2["While: Condition-based"]
    C --> C3["For...of: Direct access"]
    C --> C4["forEach: Functional"]
    
    D --> D1["Statistics calculation"]
    D --> D2["Data transformation"]
    D --> D3["Filtering & searching"]
    D --> D4["Real-time processing"]
    
    E --> E1["Arrow functions"]
    E --> E2["Method chaining"]
    E --> E3["Destructuring"]
    E --> E4["Template literals"]
    
    F["💡 Key Benefits"] --> F1["Efficient data handling"]
    F --> F2["Reduced code repetition"]
    F --> F3["Scalable solutions"]
    F --> F4["Cleaner syntax"]
    
    style A fill:#e3f2fd
    style B fill:#e8f5e8
    style C fill:#fff3e0
    style D fill:#f3e5f5
    style E fill:#e0f2f1
    style F fill:#fce4ec

🚀 Lộ trình làm chủ Mảng & Vòng lặp của bạn

Những việc bạn có thể làm trong 5 phút tới

  • Tạo một mảng các bộ phim yêu thích của bạn và truy cập các phần tử cụ thể
  • Viết một vòng lặp for đếm từ 1 đến 10
  • Thử thách phương thức mảng hiện đại từ bài học
  • Thực hành chỉ số mảng trong bảng điều khiển trình duyệt của bạn

🎯 Những gì bạn có thể hoàn thành trong giờ tới

  • Hoàn thành câu hỏi sau bài học và ôn lại các khái niệm khó
  • Xây dựng trình phân tích điểm toàn diện từ thử thách GitHub Copilot
  • Tạo một giỏ hàng đơn giản để thêm và xóa các mặt hàng
  • Thực hành chuyển đổi giữa các loại vòng lặp khác nhau
  • Thử nghiệm với các phương thức mảng như push, pop, slice, và splice

📅 Hành trình xử lý dữ liệu trong tuần của bạn

  • Hoàn thành bài tập "Loop an Array" với các cải tiến sáng tạo
  • Xây dựng ứng dụng danh sách việc cần làm bằng cách sử dụng mảng và vòng lặp
  • Tạo một máy tính thống kê đơn giản cho dữ liệu số
  • Thực hành với phương thức mảng MDN
  • Xây dựng giao diện thư viện ảnh hoặc danh sách phát nhạc
  • Khám phá lập trình hàm với map, filter, và reduce

🌟 Biến đổi trong tháng của bạn

  • Làm chủ các thao tác mảng nâng cao và tối ưu hóa hiệu suất
  • Xây dựng bảng điều khiển trực quan hóa dữ liệu hoàn chỉnh
  • Đóng góp cho các dự án mã nguồn mở liên quan đến xử lý dữ liệu
  • Dạy người khác về mảng và vòng lặp với các ví dụ thực tế
  • Tạo thư viện cá nhân gồm các hàm xử lý dữ liệu có thể tái sử dụng
  • Khám phá các thuật toán và cấu trúc dữ liệu dựa trên mảng

🏆 Kiểm tra cuối cùng về làm chủ xử lý dữ liệu

Ăn mừng sự làm chủ mảng và vòng lặp của bạn:

  • Phép toán mảng nào hữu ích nhất mà bạn đã học được cho các ứng dụng thực tế?
  • Loại vòng lặp nào khiến bạn cảm thấy tự nhiên nhất và tại sao?
  • Hiểu về mảng và vòng lặp đã thay đổi cách bạn tổ chức dữ liệu như thế nào?
  • Nhiệm vụ xử lý dữ liệu phức tạp nào bạn muốn giải quyết tiếp theo?
journey
    title Your Data Processing Evolution
    section Today
      Array Confusion: 3: You
      Loop Basics: 4: You
      Index Understanding: 5: You
    section This Week
      Method Mastery: 4: You
      Efficient Processing: 5: You
      Modern Syntax: 5: You
    section Next Month
      Complex Algorithms: 5: You
      Performance Optimization: 5: You
      Teaching Others: 5: You

📦 Bạn đã mở khóa sức mạnh của tổ chức và xử lý dữ liệu! Mảng và vòng lặp là nền tảng của hầu hết mọi ứng dụng bạn sẽ xây dựng. Từ danh sách đơn giản đến phân tích dữ liệu phức tạp, giờ đây bạn đã có công cụ để xử lý thông tin một cách hiệu quả và tinh tế. Mọi trang web động, ứng dụng di động, và ứng dụng dựa trên dữ liệu đều dựa vào những khái niệm cơ bản này. Chào mừng bạn đến với thế giới xử lý dữ liệu quy mô lớn! 🎉


Tuyên bố miễn trừ trách nhiệm:
Tài liệu này đã được dịch bằng dịch vụ dịch thuật AI Co-op Translator. Mặc dù chúng tôi cố gắng đảm bảo độ chính xác, xin lưu ý rằng các bản dịch tự động có thể chứa lỗi hoặc không chính xác. Tài liệu gốc bằng ngôn ngữ bản địa nên được coi là nguồn thông tin chính thức. Đối với các thông tin quan trọng, nên sử dụng dịch vụ dịch thuật chuyên nghiệp bởi con người. Chúng tôi không chịu trách nhiệm về bất kỳ sự hiểu lầm hoặc diễn giải sai nào phát sinh từ việc sử dụng bản dịch này.