Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Mảng liên kết (Associative Arrays) trong JavaScript

Trong JavaScript, không có mảng liên kết (associative array) thật sự. Điều người ta gọi là "associative array" thực chất là Object - sử dụng key (khóa) do người dùng định nghĩa thay vì chỉ số số (index).

Đặc điểm quan trọng:

  • Không có thuộc tính length
  • Không thể dùng vòng lặp for thông thường (for(let i=0; i<arr.length; i++))
  • Phải dùng for...in, Object.keys(), Object.entries(), hoặc Object.values()
  • Thứ tự key được bảo toàn (theo thứ tự tạo, từ ES2015)

Ví dụ minh họa

<!DOCTYPE html>
<html lang="vi">
<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>Associative Array (Object) JS</title>
  <style>
    body { font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; }
    .result { font-size: 20px; font-weight: 500; margin: 10px 0; }
    button { padding: 8px 16px; cursor: pointer; }
  </style>
</head>
<body>
  <h1>Object như Associative Array trong JavaScript</h1>
  <div style="color: green;" class="result" id="result"></div>
  <button class="Btn" id="btn">NHẤN VÀO ĐÂY</button>
  <h3> Nhấn nút để tạo object và hiển thị key-value </h3>
  <script>
    const resEle = document.querySelector("#result");
    document.querySelector("#btn").addEventListener("click", () => {
      // Tạo object (gọi là associative array)
      const person = { Name: "Rohan", Class: 9, Age: 16 };
      
      // Duyệt bằng for...in
      for (const key in person) {
        resEle.innerHTML += `Key = ${key} : Value = ${person[key]}
`; } // Cách hiện đại hơn: Object.entries() // Object.entries(person).forEach(([key, value]) => { // resEle.innerHTML += `Key = ${key} : Value = ${value}
`; // }); }); </script> </body> </html>

Kết quả

Key = Name : Value = Rohan
Key = Class : Value = 9
Key = Age : Value = 16

So sánh Array vs Object (Associative Array):

Đặc điểmArray (Mảng)Object (Associative Array)
Key/IndexSố nguyên (0, 1, 2...)String/Symbol (do user đặt)
lengthCó (.length)Không
Duyệtfor, forEach, map, for...offor...in, Object.keys/values/entries
Thứ tựLuôn bảo toànBảo toàn (ES2015+)
Phương thứcpush, pop, map, filter...Không có phương thức mảng

Khi nào dùng Object thay vì Array?

  • Cần tra cứu giá trị bằng key có ý nghĩa (id, name, slug...)
  • Dữ liệu không theo thứ tự tuần tự
  • Key không phải số nguyên liên tiếp

Lưu ý: Nếu cần cả thứ tự và key-value, cân nhắc Map (ES6) - có size, duyệt được, key có thể là bất kỳ kiểu nào.