2014-10-26 15 views
20

Tôi có một mảng:Hủy bỏ tất cả các mục sau một chỉ số

array = ['mario','luigi','kong'] 

tôi gọi nối của nó chức năng để loại bỏ tất cả các mục trước một chỉ số:

array.splice(1) //-> ['luigi','kong'] 

Tôi chỉ tự hỏi nếu có chức năng tương tự như mối nối để xóa tất cả các mục sau chỉ mục:

mã giả

array.mirrorsplice(1) //-> ['mario','luigi'] 
+0

Bản sao có thể có của [Xóa tất cả các phần tử sau một vị trí trong một mảng đối tượng trong Javascript bằng cách sử dụng mối nối] (https://stackoverflow.com/questions/24862347/remove-all-elements-after-a-position- in-an-array-of-objects-in-javascript-sử dụng) –

Trả lời

43

Sử dụng .length để thiết lập một kích thước mới cho một mảng, mà là nhanh hơn so với mối nối() để đột biến:

var array = ['mario','luigi','kong', 1, 3, 6, 8]; 
array.length=2; 
alert(array); // shows "mario,luigi"; 

Tại sao nó nhanh hơn? Bởi vì .splice() phải tạo một mảng mới chứa tất cả các mục đã loại bỏ, trong khi .length không tạo ra gì và "trả về" một số thay vì một mảng mới.

Để giải quyết splice() sử dụng, bạn có thể ăn nó một chỉ số tiêu cực, cùng với một số lượng lớn để chop off cuối của một mảng:

var array = ['mario','luigi','kong']; 
array.splice(-1, 9e9); 
alert(array); // shows "mario,luigi"; 
+2

Có thể giảm 'độ dài' gây ra rò rỉ bộ nhớ hay không công cụ javascript xử lý việc này? --- Ok, theo thông số kỹ thuật ECMAScript, điều này được xác định rõ ràng và được xử lý chính xác, các yếu tố sẽ bị xóa. http://stackoverflow.com/questions/31547315/is-it-an-antipattern-to-set-an-array-length-in-javascript/31560542#31560542 –

+1

Vui lòng xem điểm chuẩn này so sánh các giải pháp được đề xuất: https: // jsperf.com/remove-all-array-elements-after-a-given-index – Stephan

4

Mặc dù gán một giá trị ngắn với độ dài mảng (như @ dandavis nói) là cách nhanh nhất và đơn giản nhất để xóa phần tử trailing khỏi một mảng, bạn cũng có thể làm điều đó bằng cách sử dụng phương thức tương tự như splice được gọi là slice. Giống như sau:

array = ['mario', 'luigi', 'kong']; 
 

 
array = array.slice(0, 2); //Need to assign it to the same or another variable 
 

 
console.log(array); //["mario", "luigi"]

Như bạn thấy bạn cần phải lưu trữ các giá trị trả về từ slice phương pháp. Để hiểu 'tại sao', đây là sự khác biệt lớn giữa slicesplice phương pháp:

  • Phương pháp splice() trả về mục gỡ bỏ (s) trong một mảng và slice() phương thức trả về thành phần được chọn (s) trong một mảng, như một đối tượng mảng mới.
  • Phương pháp splice() thay đổi mảng ban đầu và phương pháp slice() không thay đổi mảng gốc.
+2

Đây là điểm chuẩn nhỏ (https://jsperf.com/remove-all-array-elements-after-a-given-index) so sánh các giải pháp được đưa ra cho câu hỏi này. – Stephan

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