Câu hỏi này gần giống với How to efficiently count the number of keys/properties of an object in JavaScript?.Tính hiệu quả số lượng khóa/thuộc tính của một đối tượng trong JavaScript
Tôi muốn biết thêm một phần thông tin: "hằng số thời gian" cách xác định số lượng khóa trong đối tượng? Tôi chủ yếu quan tâm đến việc thực hiện điều này trong Node.JS, vì hầu hết các đối tượng trên trình duyệt không quá lớn để có mối quan tâm lớn.
EDIT: Dường như Object.keys(obj).length
lợi nhuận trong thời gian tuyến tính O (n) trong Google Chrome và trong Node.js (ví dụ: phụ thuộc vào số lượng các phím trong obj
). Có phương pháp O (1) nào tốt hơn không?
tôi đã làm một số thử nghiệm trong Node.js (nguồn là bên dưới)
var tests = [10e3, 10e4, 10e5, 10e6]
for(j in tests) {
var obj = {};
for(i = 0; i < tests[j]; i++)
obj[i] = i;
console.time('test' + tests[j]);
Object.keys(obj).length;
console.timeEnd('test' + tests[j]);
}
Đối với n = 10e3, 10e4, 10e5, 10e6 ... kết quả là:
test10000: 5ms
test100000: 20ms
test1000000: 371ms
test10000000: 4009ms
Bạn đã thử kiểm tra điều này chưa? – Blender
Không. Hôm nay tôi cảm thấy lười biếng ...:/Trường hợp thứ Hai, tôi cho là vậy. – BMiner
Tôi nghi ngờ rằng nhận được ".length" từ kết quả của việc gọi "Object.keys()" là không đổi-thời gian, nhưng tôi cũng nghi ngờ rằng gọi "Object.keys()" là tuyến tính trong số lượng tài sản. – Pointy