Trong Javascript, có hai phương thức trong Array.prototype
để xóa phần tử đầu tiên của một mảng. shift[]
và splice[]
shift[]
shift[]
không chấp nhận bất kỳ đối số nào. Nó trả về phần tử đầu tiên của mảng và xóa phần tử đó khỏi mảng
const array = [1, 2, 3, 4, 5, 6, 7, 8, 9];array.shift[]; // returns 1console.log[array]; // prints [2, 3, 4, 5, 6, 7, 8, 9]mối nối [bắt đầu, xóaĐếm]
Để xóa phần tử đầu tiên, chúng tôi sẽ cần cung cấp hai đối số cho splice[]
. Đối số đầu tiên là start
, là chỉ mục của mục chúng tôi đang xóa. Vì chúng tôi đang xóa mục đầu tiên, bắt đầu là 0
trong trường hợp này
Đối số thứ hai là
const array = [1, 2, 3, 4, 5, 6, 7, 8, 9];array.splice[0, 1]; // returns [1]console.log[array]; // prints [2, 3, 4, 5, 6, 7, 8, 9]0, là số mục chúng tôi muốn trích xuất. Vì chúng tôi chỉ xóa một mục nên số lần xóa là
const array = [1, 2, 3, 4, 5, 6, 7, 8, 9];array.splice[0, 1]; // returns [1]console.log[array]; // prints [2, 3, 4, 5, 6, 7, 8, 9]1
Điều quan trọng cần lưu ý là splice[]
trả về một mảng, không phải một mục. Trong ví dụ bên dưới, chúng ta thấy rằng mối nối trả về một mảng chứa mục đầu tiên, đó là
const array = [1, 2, 3, 4, 5, 6, 7, 8, 9];array.splice[0, 1]; // returns [1]console.log[array]; // prints [2, 3, 4, 5, 6, 7, 8, 9]1
const array = [1, 2, 3, 4, 5, 6, 7, 8, 9];array.splice[0, 1]; // returns [1]console.log[array]; // prints [2, 3, 4, 5, 6, 7, 8, 9]Cái nào nhanh hơn?
Chạy thử nghiệm trên jsperf. com, chúng tôi có một người chiến thắng rõ ràng. Sử dụng shift[]
để loại bỏ phần tử đầu tiên chỉ mất 10% thời gian của splice[]
Sử dụng shift[]
chắc chắn là sự lựa chọn tốt hơn
splice[] chậm hơn 88% so với shift[] Tại sao shift[] lại nhanh hơn nhiều?
Hãy đi sâu vào để xem những gì đang xảy ra dưới mui xe. Dưới đây là tóm tắt nhanh về cách thức hoạt động của từng phương pháp
sự thay đổi[]
- Đặt
const array = [1, 2, 3, 4, 5, 6, 7, 8, 9];array.splice[0, 1]; // returns [1]console.log[array]; // prints [2, 3, 4, 5, 6, 7, 8, 9]
7 bằng vớiconst array = [1, 2, 3, 4, 5, 6, 7, 8, 9];array.splice[0, 1]; // returns [1]console.log[array]; // prints [2, 3, 4, 5, 6, 7, 8, 9]
8 - Đối với mỗi mục tiếp theo [
const array = [1, 2, 3, 4, 5, 6, 7, 8, 9];array.splice[0, 1]; // returns [1]console.log[array]; // prints [2, 3, 4, 5, 6, 7, 8, 9]
9,Array.prototype
0,…] hãy giảm chỉ số của chúng đi 1. Vì vậy,const array = [1, 2, 3, 4, 5, 6, 7, 8, 9];array.splice[0, 1]; // returns [1]console.log[array]; // prints [2, 3, 4, 5, 6, 7, 8, 9]
9 trở thànhconst array = [1, 2, 3, 4, 5, 6, 7, 8, 9];array.splice[0, 1]; // returns [1]console.log[array]; // prints [2, 3, 4, 5, 6, 7, 8, 9]
8,Array.prototype
0 trở thànhconst array = [1, 2, 3, 4, 5, 6, 7, 8, 9];array.splice[0, 1]; // returns [1]console.log[array]; // prints [2, 3, 4, 5, 6, 7, 8, 9]
9, v.v. - Xóa phần tử cuối cùng của mảng
Array.prototype
5 - Trở lại
const array = [1, 2, 3, 4, 5, 6, 7, 8, 9];array.splice[0, 1]; // returns [1]console.log[array]; // prints [2, 3, 4, 5, 6, 7, 8, 9]
7
mối nối [0, 1]
- Tạo một mảng mới
Array.prototype
7 với biểu thứcArray.prototype
8 - Đặt
Array.prototype
9 bằng vớishift[]
0 - Đối với mỗi mục tiếp theo [
const array = [1, 2, 3, 4, 5, 6, 7, 8, 9];array.splice[0, 1]; // returns [1]console.log[array]; // prints [2, 3, 4, 5, 6, 7, 8, 9]
9,Array.prototype
0,…] hãy giảm chỉ số của chúng đi 1. Vì vậy,const array = [1, 2, 3, 4, 5, 6, 7, 8, 9];array.splice[0, 1]; // returns [1]console.log[array]; // prints [2, 3, 4, 5, 6, 7, 8, 9]
9 trở thànhconst array = [1, 2, 3, 4, 5, 6, 7, 8, 9];array.splice[0, 1]; // returns [1]console.log[array]; // prints [2, 3, 4, 5, 6, 7, 8, 9]
8,Array.prototype
0 trở thànhconst array = [1, 2, 3, 4, 5, 6, 7, 8, 9];array.splice[0, 1]; // returns [1]console.log[array]; // prints [2, 3, 4, 5, 6, 7, 8, 9]
9, v.v. - Xóa phần tử cuối cùng của mảng
Array.prototype
5 - Trả lại
shift[]
8
Sự khác biệt chính giữa hai phương pháp nằm ở Bước 1 và 2. splice[]
tạo một mảng mới và điền nó vào mục đầu tiên. Việc khởi tạo và định nghĩa thuộc tính không tồn tại trước đây 0
tương đối tốn kém về mặt tính toán
Nếu tất cả những gì bạn cần làm là xóa phần tử đầu tiên, hãy luôn sử dụng shift[]
vì nó nhanh hơn nhiều. Mặc dù splice[]
là một phương thức mạnh mẽ có thể thực hiện các tác vụ như chèn và trích xuất nhiều lần, nhưng nó không phù hợp với tác vụ này vì nó khởi tạo và thao tác một mảng không cần thiết