2009-10-28 37 views
6

Tôi phải xóa một số phần tử của mảng, nhưng không cần sắp xếp lại mảng.Cách tốt nhất để xóa phần tử khỏi mảng mà không cần sắp xếp lại nó

Nếu tôi sử dụng "xóa" để xóa các phần tử của tôi, các "lỗ" mất bộ nhớ?

var array=["A","B","C"]; 
delete array[1]; // array -> ["A", undefined, "C"] 

Tôi nghĩ phần tử đã xóa thực sự bị xóa để không chiếm dung lượng bộ nhớ, không đúng?

Trả lời

4

Phụ thuộc hoàn toàn vào thực hiện. Nội bộ tất cả các biểu diễn JS cuối cùng sẽ chuyển đổi thành một biểu diễn thưa thớt, nhưng biểu diễn sparese có xu hướng sử dụng nhiều bộ nhớ hơn cho mỗi phần tử và chậm hơn để truy cập so với mảng không thưa thớt.

Vì lý do này, việc loại bỏ sự chênh lệch từ một mảng dày đặc sẽ không ảnh hưởng đến bộ nhớ, nhưng sau khi một tập hợp đầy đủ các phần tử được gỡ bỏ, việc triển khai có thể chuyển đổi thành biểu diễn thưa thớt để tiết kiệm bộ nhớ tổng thể.

Lưu ý: đối tượng hoặc giá trị tại chỉ mục bạn xóa sẽ không bị xóa ngay lập tức - xóa đơn giản xóa vị trí thuộc tính khỏi đối tượng - đối tượng/giá trị sẽ chỉ bị xóa trong thẻ GC và chỉ khi không có tài liệu tham khảo nào khác.

3

Bạn có thể sử dụng array.splice(1, 1); Nó sẽ xóa một mục nhập tại chỉ mục 1. Tham số đầu tiên là chỉ mục, thông số thứ hai là số.

+1

mà không REARRANGE nó, vì vậy mối nối không phải là tôi tìm kiếm. – blow

9

Hãy thử sử dụng,

array.splice(index, 1); 

Xem Mastering JavaScript Arrays.

+0

mà không REARRANGE nó, vì vậy mối nối không phải là tôi tìm kiếm. – blow

+3

Mảng không được sắp xếp lại với mối nối, chỉ mục bị xóa hoàn toàn. Bạn có nghĩa là, bạn không muốn xóa chỉ mục khỏi mảng? Nếu vậy, chỉ cần đặt giá trị tại chỉ mục đó thành null. – JoshNaro

Các vấn đề liên quan