Tôi có một mô hình với hàng ngàn đối tượng. Tôi đã tự hỏi điều gì sẽ là cách hiệu quả nhất để lưu trữ chúng và truy xuất một đối tượng một khi tôi có id. Các id là số dài.
Vì vậy, đây là 2 lựa chọn tôi đã suy nghĩ. trong tùy chọn một, đó là một mảng đơn giản với chỉ số tăng dần. trong tùy chọn 2, nó là một mảng kết hợp và có thể là một đối tượng, nếu nó tạo ra sự khác biệt. Câu hỏi của tôi là cái nào hiệu quả hơn, khi tôi chủ yếu cần lấy một đối tượng, nhưng đôi khi cũng lặp qua chúng và sắp xếp.
Tùy chọn một với mảng không liên kết:
var a = [{id: 29938, name: 'name1'},
{id: 32994, name: 'name1'}];
function getObject(id) {
for (var i=0; i < a.length; i++) {
if (a[i].id == id)
return a[i];
}
}
Tùy chọn hai với mảng kết hợp:
var a = []; // maybe {} makes a difference?
a[29938] = {id: 29938, name: 'name1'};
a[32994] = {id: 32994, name: 'name1'};
function getObject(id) {
return a[id];
}
Cập nhật:
OK, tôi hiểu rằng sử dụng một mảng trong tùy chọn thứ hai là không cần thiết. Vì vậy, dòng khai báo tùy chọn thứ hai nên thực sự là: var a = {};
và câu hỏi duy nhất là: điều gì đang hoạt động tốt hơn trong việc truy xuất một đối tượng với một id đã cho: một mảng hoặc một đối tượng trong đó id là khóa.
và ngoài ra, câu trả lời sẽ thay đổi nếu tôi sẽ phải sắp xếp danh sách nhiều lần?