Tôi muốn loại bỏ một số thành viên của một đối tượng (vì lợi ích của đối số, những người có khóa bắt đầu bằng '_'). Một cách thanh lịch để làm điều này là gì? Cách ngây thơ sẽ là:Thành ngữ tốt để lọc ra các thành viên của một đối tượng (javascript)
for (var i in obj)
if (i[0] === '_')
delete obj[i];
nhưng điều đó sửa đổi đối tượng bên dưới trong khi lặp lại. Trong Node ít nhất tôi đoán tôi có thể
Object.keys(obj).forEach(function (i) { if (i[0] === '_') delete obj[i]; });
hoặc khởi động lại lần lặp mỗi khi có gì đó bị xóa với vòng lặp lồng nhau khó xử.
Có giải pháp nào tốt hơn không?
EDIT: Trong thử nghiệm ngay bây giờ, trong node.js ít nhất, giải pháp ngây thơ thực sự có vẻ hoạt động. Nó chắc chắn là có thể cho ... trong là (bắt buộc phải được) thực hiện một cách an toàn. Có ai biết không?
Việc sửa đổi đối tượng trong vòng lặp 'for ... in' có gây ra sự cố không? Tôi không thấy nó khác nhiều so với việc sửa đổi đối tượng trong hàm gọi lại 'forEach()'. – Pointy
Tôi giả sử rằng 'Object.keys' chụp nhanh các phím trong đối tượng. Có lẽ điều đó không đúng. – Grumdrig
... và giả sử rằng 'for (... in ...)' không chụp nhanh đối tượng. – Grumdrig