Các bảng Hash là một cấu trúc dữ liệu cho phép bạn tạo một danh sách các giá trị được ghép nối. Sau đó, bạn có thể truy xuất một giá trị nhất định bằng cách sử dụng khóa cho giá trị đó mà bạn đặt vào bảng trước.
Nội phân Chính showShow
- Cách sử dụng các bảng băm với các lớp đối tượng và bản đồ trong JavaScript
- Cách thực hiện cấu trúc dữ liệu bảng băm trong JavaScript
- Cách viết phương thức băm []
- Cách ghi phương thức SET []
- Cách viết phương thức get []
- Cách ghi phương thức Remove []
- Cách kiểm tra việc thực hiện bảng băm
- Cách xử lý chỉ số va chạm
- Cảm ơn bạn đã đọc hướng dẫn này
Bảng băm biến một phím thành một chỉ mục số nguyên bằng hàm băm và chỉ mục sẽ quyết định nơi lưu trữ cặp khóa/giá trị trong bộ nhớ:
Bạn sẽ thường sử dụng bảng băm vì các hoạt động tìm kiếm, chèn và xóa nhanh của nó:
Thuật toán | Trung bình | Trường hợp xấu nhất |
Không gian | Trên] | Trên] |
Tìm kiếm | O [1] | Trên] |
Tìm kiếm | O [1] | Trên] |
Tìm kiếm | O [1] | Trên] |
Tìm kiếm
O [1]
Chèn
Cách sử dụng các bảng băm với các lớp đối tượng và bản đồ trong JavaScript
Xóa bỏ
Nguồn từ Wikipedia
Hướng dẫn này sẽ giúp bạn hiểu việc triển khai bảng băm trong JavaScript cũng như cách bạn có thể xây dựng lớp bảng băm của riêng mình.Đầu tiên, chúng ta hãy xem các lớp
const obj = {};
obj.name = "Nathan";
obj.hasOwnProperty = true;
console.log[obj.hasOwnProperty["name"]];
// Error: obj.hasOwnProperty is not a function
5 và const obj = {};
obj.name = "Nathan";
obj.hasOwnProperty = true;
console.log[obj.hasOwnProperty["name"]];
// Error: obj.hasOwnProperty is not a function
6 của JavaScript.- Ví dụ phổ biến nhất về bảng băm trong JavaScript là kiểu dữ liệu
5, trong đó bạn có thể ghép giá trị thuộc tính của đối tượng với khóa thuộc tính.const obj = {}; obj.name = "Nathan"; obj.hasOwnProperty = true; console.log[obj.hasOwnProperty["name"]]; // Error: obj.hasOwnProperty is not a function
- Trong ví dụ sau, khóa
8 được ghép nối với giá trị số điện thoại làconst obj = {}; obj.name = "Nathan"; obj.hasOwnProperty = true; console.log[obj.hasOwnProperty["name"]]; // Error: obj.hasOwnProperty is not a function
9 và khóaconst obj = {}; obj.name = "Nathan"; obj.hasOwnProperty = true; console.log[obj.hasOwnProperty["name"]]; // Error: obj.hasOwnProperty is not a function
0 được ghép nối với giá trịconst collection = new Map[]; collection.set["Nathan", "555-0182"]; collection.set["Jane", "555-0182"]; console.log[collection.get["Nathan"]]; // 555-0182 console.log[collection.size]; // 2
1:const collection = new Map[]; collection.set["Nathan", "555-0182"]; collection.set["Jane", "555-0182"]; console.log[collection.get["Nathan"]]; // 555-0182 console.log[collection.size]; // 2
Đối tượng
let obj = {
Nathan: "555-0182",
Jane: "315-0322"
}
JavaScript là một ví dụ về triển khai bảng bămNhưng loại const obj = {};
obj.name = "Nathan";
obj.hasOwnProperty = true;
console.log[obj.hasOwnProperty["name"]];
// Error: obj.hasOwnProperty is not a function
5 của JavaScript là một loại thực hiện bảng băm đặc biệt vì hai lý do:Nó có các thuộc tính được thêm bởi lớp
const obj = {};
obj.name = "Nathan";
obj.hasOwnProperty = true;
console.log[obj.hasOwnProperty["name"]];
// Error: obj.hasOwnProperty is not a function
5. Các khóa của bạn nhập có thể xung đột và ghi đè các thuộc tính mặc định được kế thừa từ lớp.Kích thước của bảng băm không được theo dõi. Bạn cần đếm thủ công số lượng thuộc tính được định nghĩa bởi lập trình viên thay vì được thừa hưởng từ nguyên mẫu.Ví dụ: nguyên mẫu
const obj = {};
obj.name = "Nathan";
obj.hasOwnProperty = true;
console.log[obj.hasOwnProperty["name"]];
// Error: obj.hasOwnProperty is not a function
5 có phương thức const collection = new Map[];
collection.set["Nathan", "555-0182"];
collection.set["Jane", "555-0182"];
console.log[collection.get["Nathan"]]; // 555-0182
console.log[collection.size]; // 2
5 cho phép bạn kiểm tra xem thuộc tính không được kế thừa:const obj = {};
obj.name = "Nathan";
console.log[obj.hasOwnProperty["name"]]; // true
JavaScript đối tượng Phương thức kế thừa Ví dụ cuộc gọiJavaScript không chặn nỗ lực ghi đè lên phương thức const collection = new Map[];
collection.set["Nathan", "555-0182"];
collection.set["Jane", "555-0182"];
console.log[collection.get["Nathan"]]; // 555-0182
console.log[collection.size]; // 2
5, điều này có thể gây ra lỗi như thế này:const obj = {};
obj.name = "Nathan";
obj.hasOwnProperty = true;
console.log[obj.hasOwnProperty["name"]];
// Error: obj.hasOwnProperty is not a function
Thuộc tính di truyền đối tượng JavaScript bị ghi đèĐể xử lý những thiếu sót này, JavaScript đã tạo ra một triển khai khác của cấu trúc dữ liệu bảng Hash được gọi là
const obj = {};
obj.name = "Nathan";
obj.hasOwnProperty = true;
console.log[obj.hasOwnProperty["name"]];
// Error: obj.hasOwnProperty is not a function
6Giống như const obj = {};
obj.name = "Nathan";
obj.hasOwnProperty = true;
console.log[obj.hasOwnProperty["name"]];
// Error: obj.hasOwnProperty is not a function
5, const obj = {};
obj.name = "Nathan";
obj.hasOwnProperty = true;
console.log[obj.hasOwnProperty["name"]];
// Error: obj.hasOwnProperty is not a function
6 cho phép bạn lưu trữ các cặp giá trị khóa bên trong cấu trúc dữ liệu. Đây là một ví dụ về const obj = {};
obj.name = "Nathan";
obj.hasOwnProperty = true;
console.log[obj.hasOwnProperty["name"]];
// Error: obj.hasOwnProperty is not a function
6 trong hành động:const collection = new Map[];
collection.set["Nathan", "555-0182"];
collection.set["Jane", "555-0182"];
console.log[collection.get["Nathan"]]; // 555-0182
console.log[collection.size]; // 2
JavaScript Lớp bản đồ là một triển khai khác của bảng bămKhông giống như loại
const obj = {};
obj.name = "Nathan";
obj.hasOwnProperty = true;
console.log[obj.hasOwnProperty["name"]];
// Error: obj.hasOwnProperty is not a function
5, const obj = {};
obj.name = "Nathan";
obj.hasOwnProperty = true;
console.log[obj.hasOwnProperty["name"]];
// Error: obj.hasOwnProperty is not a function
6 yêu cầu bạn sử dụng các phương thức const collection = new Map[];
collection.set["Nathan", "555-0182"];
collection["size"] = false;
console.log[collection.get["size"]]; // undefined
console.log[collection.size]; // 1
3 và const collection = new Map[];
collection.set["Nathan", "555-0182"];
collection["size"] = false;
console.log[collection.get["size"]]; // undefined
console.log[collection.size]; // 1
4 để xác định và truy xuất bất kỳ giá trị cặp chính nào mà bạn muốn được thêm vào cấu trúc dữ liệu.Bạn cũng không thể ghi đè lên các thuộc tính được kế thừa const obj = {};
obj.name = "Nathan";
obj.hasOwnProperty = true;
console.log[obj.hasOwnProperty["name"]];
// Error: obj.hasOwnProperty is not a function
6. Ví dụ: mã sau đã cố gắng ghi đè giá trị thuộc tính const collection = new Map[];
collection.set["Nathan", "555-0182"];
collection["size"] = false;
console.log[collection.get["size"]]; // undefined
console.log[collection.size]; // 1
6 thành const collection = new Map[];
collection.set["Nathan", "555-0182"];
collection["size"] = false;
console.log[collection.get["size"]]; // undefined
console.log[collection.size]; // 1
7:const collection = new Map[];
collection.set["Nathan", "555-0182"];
collection["size"] = false;
console.log[collection.get["size"]]; // undefined
console.log[collection.size]; // 1
Map Loại thuộc tính không thể ghi đèCách thực hiện cấu trúc dữ liệu bảng băm trong JavaScript
Như bạn có thể thấy từ mã ở trên, bạn không thể thêm một mục nhập mới vào đối tượng
const obj = {};
obj.name = "Nathan";
obj.hasOwnProperty = true;
console.log[obj.hasOwnProperty["name"]];
// Error: obj.hasOwnProperty is not a function
6 mà không cần sử dụng phương thức const collection = new Map[];
collection.set["Nathan", "555-0182"];
collection["size"] = false;
console.log[collection.get["size"]]; // undefined
console.log[collection.size]; // 1
3.Cấu trúc dữ liệu
const obj = {};
obj.name = "Nathan";
obj.hasOwnProperty = true;
console.log[obj.hasOwnProperty["name"]];
// Error: obj.hasOwnProperty is not a function
6 cũng có thể lặp lại, có nghĩa là bạn có thể lặp lại dữ liệu như sau:
Idering thông qua một đối tượng bản đồconst myMap = new Map[]; myMap.set["Nathan", "555-0182"]; myMap.set["Jane", "315-0322"]; for [let [key, value] of myMap] { console.log[`${key} = ${value}`]; }
- Bây giờ bạn đã học được cách thực hiện các bảng băm JavaScript dưới dạng cấu trúc dữ liệu
5 vàconst obj = {}; obj.name = "Nathan"; obj.hasOwnProperty = true; console.log[obj.hasOwnProperty["name"]]; // Error: obj.hasOwnProperty is not a function
6, hãy xem cách bạn có thể tạo triển khai bảng băm của riêng mình tiếp theo.const obj = {}; obj.name = "Nathan"; obj.hasOwnProperty = true; console.log[obj.hasOwnProperty["name"]]; // Error: obj.hasOwnProperty is not a function
- Mặc dù JavaScript đã có hai triển khai bảng băm, nhưng việc viết triển khai bảng băm của riêng bạn là một trong những câu hỏi phỏng vấn JavaScript phổ biến nhất.
Bạn có thể triển khai bảng băm trong JavaScript trong ba bước:
Tạo một lớpconst myMap = new Map[];
myMap.set["Nathan", "555-0182"];
myMap.set["Jane", "315-0322"];
for [let [key, value] of myMap] {
console.log[`${key} = ${value}`];
}
3 với các thuộc tính ban đầu const myMap = new Map[];
myMap.set["Nathan", "555-0182"];
myMap.set["Jane", "315-0322"];
for [let [key, value] of myMap] {
console.log[`${key} = ${value}`];
}
4 và const collection = new Map[];
collection.set["Nathan", "555-0182"];
collection["size"] = false;
console.log[collection.get["size"]]; // undefined
console.log[collection.size]; // 1
6Thêm hàm
const myMap = new Map[];
myMap.set["Nathan", "555-0182"];
myMap.set["Jane", "315-0322"];
for [let [key, value] of myMap] {
console.log[`${key} = ${value}`];
}
6 để chuyển đổi các phím thành các chỉ sốCách viết phương thức băm []
Thêm các phương thức
const collection = new Map[];
collection.set["Nathan", "555-0182"];
collection["size"] = false;
console.log[collection.get["size"]]; // undefined
console.log[collection.size]; // 1
3 và const collection = new Map[];
collection.set["Nathan", "555-0182"];
collection["size"] = false;
console.log[collection.get["size"]]; // undefined
console.log[collection.size]; // 1
4 để thêm và truy xuất các cặp khóa/giá trị từ bảng.Được rồi, hãy bắt đầu với việc tạo lớp
const myMap = new Map[];
myMap.set["Nathan", "555-0182"];
myMap.set["Jane", "315-0322"];
for [let [key, value] of myMap] {
console.log[`${key} = ${value}`];
}
3. Mã bên dưới sẽ tạo ra một thùng const myMap = new Map[];
myMap.set["Nathan", "555-0182"];
myMap.set["Jane", "315-0322"];
for [let [key, value] of myMap] {
console.log[`${key} = ${value}`];
}
4 với kích thước class HashTable {
constructor[] {
this.table = new Array[127];
this.size = 0;
}
}
1:_hash[key] {
let hash = 0;
for [let i = 0; i < key.length; i++] {
hash += key.charCodeAt[i];
}
return hash;
}
Nhưng vì lớp
const myMap = new Map[];
myMap.set["Nathan", "555-0182"];
myMap.set["Jane", "315-0322"];
for [let [key, value] of myMap] {
console.log[`${key} = ${value}`];
}
3 chỉ có 127 thùng, điều này có nghĩa là phương thức class HashTable {
constructor[] {
this.table = new Array[127];
this.size = 0;
}
}
8 phải trả về một số giữa class HashTable {
constructor[] {
this.table = new Array[127];
this.size = 0;
}
}
9.Để đảm bảo rằng giá trị băm không vượt quá kích thước xô, bạn cần sử dụng toán tử modulo như được hiển thị bên dưới:
_hash[key] {
let hash = 0;
for [let i = 0; i < key.length; i++] {
hash += key.charCodeAt[i];
}
return hash % this.table.length;
}
Bây giờ bạn đã hoàn thành phương thức
class HashTable {
constructor[] {
this.table = new Array[127];
this.size = 0;
}
}
8, đã đến lúc viết các phương thức const collection = new Map[];
collection.set["Nathan", "555-0182"];
collection["size"] = false;
console.log[collection.get["size"]]; // undefined
console.log[collection.size]; // 1
3 và const collection = new Map[];
collection.set["Nathan", "555-0182"];
collection["size"] = false;
console.log[collection.get["size"]]; // undefined
console.log[collection.size]; // 1
4.Cách ghi phương thức SET []
Để đặt cặp khóa/giá trị trong bảng băm của bạn, bạn cần ghi một phương thức
const collection = new Map[];
collection.set["Nathan", "555-0182"];
collection["size"] = false;
console.log[collection.get["size"]]; // undefined
console.log[collection.size]; // 1
3 chấp nhận & nbsp; ________ 74 làm tham số của nó:- Phương thức
3 sẽ gọi phương thứcconst collection = new Map[]; collection.set["Nathan", "555-0182"]; collection["size"] = false; console.log[collection.get["size"]]; // undefined console.log[collection.size]; // 1
8 để nhận giá trịclass HashTable { constructor[] { this.table = new Array[127]; this.size = 0; } }
7._hash[key] { let hash = 0; for [let i = 0; i < key.length; i++] { hash += key.charCodeAt[i]; } return hash; }
- Cặp
8 sẽ được gán cho_hash[key] { let hash = 0; for [let i = 0; i < key.length; i++] { hash += key.charCodeAt[i]; } return hash; }
4 tạiconst myMap = new Map[]; myMap.set["Nathan", "555-0182"]; myMap.set["Jane", "315-0322"]; for [let [key, value] of myMap] { console.log[`${key} = ${value}`]; }
7 được chỉ định_hash[key] { let hash = 0; for [let i = 0; i < key.length; i++] { hash += key.charCodeAt[i]; } return hash; }
- Sau đó, thuộc tính
6 sẽ được tăng lên bởi mộtconst collection = new Map[]; collection.set["Nathan", "555-0182"]; collection["size"] = false; console.log[collection.get["size"]]; // undefined console.log[collection.size]; // 1
set[key, value] {
const index = this._hash[key];
this.table[index] = [key, value];
this.size++;
}
Bây giờ phương thức
const collection = new Map[];
collection.set["Nathan", "555-0182"];
collection["size"] = false;
console.log[collection.get["size"]]; // undefined
console.log[collection.size]; // 1
3 đã hoàn tất, hãy viết phương thức const collection = new Map[];
collection.set["Nathan", "555-0182"];
collection["size"] = false;
console.log[collection.get["size"]]; // undefined
console.log[collection.size]; // 1
4 để lấy một giá trị bằng khóa của nó.Cách viết phương thức get []
Để nhận được một giá trị nhất định từ bảng băm, bạn cần ghi một phương thức
const collection = new Map[];
collection.set["Nathan", "555-0182"];
collection["size"] = false;
console.log[collection.get["size"]]; // undefined
console.log[collection.size]; // 1
4 chấp nhận giá trị class HashTable {
constructor[] {
this.table = new Array[127];
this.size = 0;
}
}
4 làm tham số của nó:- Phương thức sẽ gọi phương thức
8 để một lần nữa truy xuất bảngclass HashTable { constructor[] { this.table = new Array[127]; this.size = 0; } }
7_hash[key] { let hash = 0; for [let i = 0; i < key.length; i++] { hash += key.charCodeAt[i]; } return hash; }
- Trả lại giá trị được lưu trữ tại
8_hash[key] { let hash = 0; for [let i = 0; i < key.length; i++] { hash += key.charCodeAt[i]; } return hash % this.table.length; }
const obj = {};
obj.name = "Nathan";
console.log[obj.hasOwnProperty["name"]]; // true
0Bằng cách này, phương thức
const collection = new Map[];
collection.set["Nathan", "555-0182"];
collection["size"] = false;
console.log[collection.get["size"]]; // undefined
console.log[collection.size]; // 1
4 sẽ trả về cặp khóa/giá trị trở lại hoặc set[key, value] {
const index = this._hash[key];
this.table[index] = [key, value];
this.size++;
}
0 khi không có cặp khóa/giá trị được lưu trữ trong _hash[key] {
let hash = 0;
for [let i = 0; i < key.length; i++] {
hash += key.charCodeAt[i];
}
return hash;
}
7 được chỉ định.Càng xa càng tốt. Hãy thêm một phương thức khác để xóa cặp khóa/giá trị khỏi bảng băm tiếp theo.
Cách ghi phương thức Remove []
Để xóa một cặp khóa/giá trị khỏi bảng băm, bạn cần ghi một phương thức
set[key, value] {
const index = this._hash[key];
this.table[index] = [key, value];
this.size++;
}
2 chấp nhận giá trị class HashTable {
constructor[] {
this.table = new Array[127];
this.size = 0;
}
}
4 làm tham số của nó:- Truy xuất đúng
7 bằng phương pháp_hash[key] { let hash = 0; for [let i = 0; i < key.length; i++] { hash += key.charCodeAt[i]; } return hash; }
8class HashTable { constructor[] { this.table = new Array[127]; this.size = 0; } }
- Kiểm tra xem
8 có giá trị sự thật không và thuộc tính_hash[key] { let hash = 0; for [let i = 0; i < key.length; i++] { hash += key.charCodeAt[i]; } return hash % this.table.length; }
7 lớn hơn 0. Chỉ định giá trịset[key, value] { const index = this._hash[key]; this.table[index] = [key, value]; this.size++; }
0 cho bên phảiset[key, value] { const index = this._hash[key]; this.table[index] = [key, value]; this.size++; }
7 và giảm thuộc tính_hash[key] { let hash = 0; for [let i = 0; i < key.length; i++] { hash += key.charCodeAt[i]; } return hash; }
6 cho một nếu là.const collection = new Map[]; collection.set["Nathan", "555-0182"]; collection["size"] = false; console.log[collection.get["size"]]; // undefined console.log[collection.size]; // 1
- Nếu không, chỉ cần trả lại
7const collection = new Map[]; collection.set["Nathan", "555-0182"]; collection["size"] = false; console.log[collection.get["size"]]; // undefined console.log[collection.size]; // 1
const obj = {};
obj.name = "Nathan";
console.log[obj.hasOwnProperty["name"]]; // true
1Với điều đó, bây giờ bạn có một phương pháp
set[key, value] {
const index = this._hash[key];
this.table[index] = [key, value];
this.size++;
}
2 hoạt động. Hãy xem liệu lớp const myMap = new Map[];
myMap.set["Nathan", "555-0182"];
myMap.set["Jane", "315-0322"];
for [let [key, value] of myMap] {
console.log[`${key} = ${value}`];
}
3 có hoạt động đúng không.Cách kiểm tra việc thực hiện bảng băm
Đã đến lúc kiểm tra việc thực hiện bảng băm. Đây là mã đầy đủ cho việc triển khai bảng băm một lần nữa:
const obj = {};
obj.name = "Nathan";
console.log[obj.hasOwnProperty["name"]]; // true
2 Triển khai Hashtable trong JavaScriptĐể kiểm tra lớp
const myMap = new Map[];
myMap.set["Nathan", "555-0182"];
myMap.set["Jane", "315-0322"];
for [let [key, value] of myMap] {
console.log[`${key} = ${value}`];
}
3, tôi sẽ tạo một thể hiện mới của const obj = {};
obj.name = "Nathan";
console.log[obj.hasOwnProperty["name"]]; // true
05 và đặt một số cặp khóa/giá trị như hình dưới đây. Các cặp khóa/giá trị dưới đây chỉ là các giá trị số tùy ý được ghép nối với tên quốc gia mà không có bất kỳ ý nghĩa đặc biệt nào:const obj = {};
obj.name = "Nathan";
console.log[obj.hasOwnProperty["name"]]; // true
3Testing set set [] Phương thứcSau đó, chúng ta hãy cố gắng truy xuất chúng bằng phương pháp
const collection = new Map[];
collection.set["Nathan", "555-0182"];
collection["size"] = false;
console.log[collection.get["size"]]; // undefined
console.log[collection.size]; // 1
4:const obj = {};
obj.name = "Nathan";
console.log[obj.hasOwnProperty["name"]]; // true
4Testing Hashtable Get [] Phương thứcCuối cùng, chúng ta hãy cố gắng xóa một trong những giá trị này bằng phương thức
set[key, value] {
const index = this._hash[key];
this.table[index] = [key, value];
this.size++;
}
2:const obj = {};
obj.name = "Nathan";
console.log[obj.hasOwnProperty["name"]]; // true
5 Thử nghiệm Hashtable Remove [] Phương thứcĐược rồi, tất cả các phương pháp đang hoạt động như mong đợi. Hãy thử một lần chèn khác với một thể hiện
const myMap = new Map[];
myMap.set["Nathan", "555-0182"];
myMap.set["Jane", "315-0322"];
for [let [key, value] of myMap] {
console.log[`${key} = ${value}`];
}
3 mới và truy xuất các giá trị đó:const obj = {};
obj.name = "Nathan";
console.log[obj.hasOwnProperty["name"]]; // true
6Hash Chỉ số bảng va chạm & NBSP;Ối! Có vẻ như chúng tôi đã gặp một số rắc rối ở đây. 😨
Cách xử lý chỉ số va chạm
Đôi khi, hàm băm trong bảng băm có thể trả về cùng số
_hash[key] {
let hash = 0;
for [let i = 0; i < key.length; i++] {
hash += key.charCodeAt[i];
}
return hash;
}
7. Trong trường hợp thử nghiệm ở trên, chuỗi const obj = {};
obj.name = "Nathan";
console.log[obj.hasOwnProperty["name"]]; // true
10 và const obj = {};
obj.name = "Nathan";
console.log[obj.hasOwnProperty["name"]]; // true
11 đều trả về cùng một giá trị const obj = {};
obj.name = "Nathan";
console.log[obj.hasOwnProperty["name"]]; // true
12 vì số const obj = {};
obj.name = "Nathan";
console.log[obj.hasOwnProperty["name"]]; // true
13 là tổng của cả hai mã ASCII của chúng.both
return the same const obj = {};
obj.name = "Nathan";
console.log[obj.hasOwnProperty["name"]]; // true
12 value because the number const obj = {};
obj.name = "Nathan";
console.log[obj.hasOwnProperty["name"]]; // true
13 is the sum of both of their ASCII code.Giá trị
const obj = {};
obj.name = "Nathan";
console.log[obj.hasOwnProperty["name"]]; // true
12 tương tự sẽ khiến chỉ số va chạm, ghi đè mục nhập trước đó với mục mới.Ngay bây giờ, dữ liệu được lưu trữ trong triển khai bảng băm của chúng tôi trông như sau:
const obj = {};
obj.name = "Nathan";
console.log[obj.hasOwnProperty["name"]]; // true
7Để xử lý va chạm số
_hash[key] {
let hash = 0;
for [let i = 0; i < key.length; i++] {
hash += key.charCodeAt[i];
}
return hash;
}
7, bạn cần lưu trữ cặp khóa/giá trị trong một mảng thứ hai để kết quả cuối cùng trông như sau:const obj = {};
obj.name = "Nathan";
console.log[obj.hasOwnProperty["name"]]; // true
8Để tạo mảng thứ hai, bạn cần cập nhật phương thức
const collection = new Map[];
collection.set["Nathan", "555-0182"];
collection["size"] = false;
console.log[collection.get["size"]]; // undefined
console.log[collection.size]; // 1
3 để nó sẽ:- Nhìn vào
8 và lặp qua các giá trị mảng._hash[key] { let hash = 0; for [let i = 0; i < key.length; i++] { hash += key.charCodeAt[i]; } return hash % this.table.length; }
- Nếu khóa tại một trong các mảng bằng với
4 được truyền vào phương thức, hãy thay thế giá trị tại INDEXclass HashTable { constructor[] { this.table = new Array[127]; this.size = 0; } }
19 và dừng bất kỳ thực thi nào thêm bằng câu lệnhconst obj = {}; obj.name = "Nathan"; console.log[obj.hasOwnProperty["name"]]; // true
20.const obj = {}; obj.name = "Nathan"; console.log[obj.hasOwnProperty["name"]]; // true
- Nếu không tìm thấy
4 phù hợp, hãy đẩy một mảng khóa và giá trị mới vào mảng thứ hai.class HashTable { constructor[] { this.table = new Array[127]; this.size = 0; } }
- Khác, khởi tạo một mảng mới và đẩy cặp khóa/giá trị vào
7 được chỉ định_hash[key] { let hash = 0; for [let i = 0; i < key.length; i++] { hash += key.charCodeAt[i]; } return hash; }
- Bất cứ khi nào một phương thức
23 được gọi, hãy tăng thuộc tínhconst obj = {}; obj.name = "Nathan"; console.log[obj.hasOwnProperty["name"]]; // true
6 lên một.const collection = new Map[]; collection.set["Nathan", "555-0182"]; collection["size"] = false; console.log[collection.get["size"]]; // undefined console.log[collection.size]; // 1
Mã phương thức
const collection = new Map[];
collection.set["Nathan", "555-0182"];
collection["size"] = false;
console.log[collection.get["size"]]; // undefined
console.log[collection.size]; // 1
3 hoàn chỉnh sẽ như sau:const obj = {};
obj.name = "Nathan";
console.log[obj.hasOwnProperty["name"]]; // true
9Tiếp theo, cập nhật phương thức
const collection = new Map[];
collection.set["Nathan", "555-0182"];
collection["size"] = false;
console.log[collection.get["size"]]; // undefined
console.log[collection.size]; // 1
4 để nó cũng sẽ kiểm tra mảng cấp hai bằng vòng lặp const obj = {};
obj.name = "Nathan";
console.log[obj.hasOwnProperty["name"]]; // true
27 và trả về cặp khóa/giá trị phù hợp:const obj = {};
obj.name = "Nathan";
obj.hasOwnProperty = true;
console.log[obj.hasOwnProperty["name"]];
// Error: obj.hasOwnProperty is not a function
0Cuối cùng, bạn cần cập nhật phương thức
set[key, value] {
const index = this._hash[key];
this.table[index] = [key, value];
this.size++;
}
2 để nó sẽ lặp qua mảng cấp hai và xóa mảng bằng giá trị class HashTable {
constructor[] {
this.table = new Array[127];
this.size = 0;
}
}
4 bên phải bằng phương thức const obj = {};
obj.name = "Nathan";
console.log[obj.hasOwnProperty["name"]]; // true
30:const obj = {};
obj.name = "Nathan";
obj.hasOwnProperty = true;
console.log[obj.hasOwnProperty["name"]];
// Error: obj.hasOwnProperty is not a function
1Với điều đó, lớp
const myMap = new Map[];
myMap.set["Nathan", "555-0182"];
myMap.set["Jane", "315-0322"];
for [let [key, value] of myMap] {
console.log[`${key} = ${value}`];
}
3 của bạn sẽ có thể tránh được bất kỳ va chạm số chỉ mục nào và lưu trữ cặp khóa/giá trị bên trong mảng cấp hai.Như một phần thưởng, hãy thêm một phương thức
const obj = {};
obj.name = "Nathan";
console.log[obj.hasOwnProperty["name"]]; // true
32 sẽ hiển thị tất cả các cặp khóa/giá trị được lưu trữ trong bảng băm. Bạn chỉ cần sử dụng phương thức const obj = {};
obj.name = "Nathan";
console.log[obj.hasOwnProperty["name"]]; // true
33 để lặp qua bảng và const obj = {};
obj.name = "Nathan";
console.log[obj.hasOwnProperty["name"]]; // true
34 Các giá trị cho một chuỗi như hình dưới đây:const obj = {};
obj.name = "Nathan";
obj.hasOwnProperty = true;
console.log[obj.hasOwnProperty["name"]];
// Error: obj.hasOwnProperty is not a function
2Đây là mã lớp
const myMap = new Map[];
myMap.set["Nathan", "555-0182"];
myMap.set["Jane", "315-0322"];
for [let [key, value] of myMap] {
console.log[`${key} = ${value}`];
}
3 hoàn chỉnh một lần nữa với việc tránh va chạm được áp dụng cho tài liệu tham khảo của bạn:Triển khai lớp Hashtable ____23CompleteBạn có thể kiểm tra việc thực hiện bằng cách tạo một thể hiện
const myMap = new Map[];
myMap.set["Nathan", "555-0182"];
myMap.set["Jane", "315-0322"];
for [let [key, value] of myMap] {
console.log[`${key} = ${value}`];
}
3 mới và thực hiện một số chèn và xóa:const obj = {};
obj.name = "Nathan";
obj.hasOwnProperty = true;
console.log[obj.hasOwnProperty["name"]];
// Error: obj.hasOwnProperty is not a function
4 Một bài kiểm tra hashtableBây giờ không có sự va chạm trong trường hợp
const myMap = new Map[];
myMap.set["Nathan", "555-0182"];
myMap.set["Jane", "315-0322"];
for [let [key, value] of myMap] {
console.log[`${key} = ${value}`];
}
3. Công việc tuyệt vời!Sự kết luận
Trong hướng dẫn này, bạn đã học được bảng băm là gì và JavaScript sử dụng nó như thế nào để tạo cấu trúc dữ liệu
const obj = {};
obj.name = "Nathan";
obj.hasOwnProperty = true;
console.log[obj.hasOwnProperty["name"]];
// Error: obj.hasOwnProperty is not a function
5 và const obj = {};
obj.name = "Nathan";
obj.hasOwnProperty = true;
console.log[obj.hasOwnProperty["name"]];
// Error: obj.hasOwnProperty is not a function
6.Bạn cũng đã học được cách thực hiện lớp
const myMap = new Map[];
myMap.set["Nathan", "555-0182"];
myMap.set["Jane", "315-0322"];
for [let [key, value] of myMap] {
console.log[`${key} = ${value}`];
}
3 của riêng bạn cũng như cách ngăn các chỉ số chính của bảng Hash va chạm bằng cách sử dụng kỹ thuật chuỗi.Bằng cách sử dụng cấu trúc dữ liệu bảng băm, bạn sẽ có thể tạo một mảng kết hợp với các hoạt động tìm kiếm, chèn và xóa nhanh. 😉
Cảm ơn bạn đã đọc hướng dẫn này
Nếu bạn muốn tìm hiểu thêm về JavaScript, bạn có thể muốn xem trang web của tôi tại Sebhastian.com, nơi tôi đã xuất bản hơn 100 hướng dẫn về lập trình với JavaScript, tất cả đều sử dụng các giải thích dễ hiểu và ví dụ về mã.
Các hướng dẫn bao gồm thao tác chuỗi, thao tác ngày, phương thức mảng và đối tượng, các giải pháp thuật toán JavaScript và nhiều hơn nữa.
Học mã miễn phí. Chương trình giảng dạy nguồn mở của Freecodecamp đã giúp hơn 40.000 người có được việc làm với tư cách là nhà phát triển. Bắt đầu