Array trong Javascripts

Như mình đề cập trong bài Object trong javascript thì mọi thứ trong JS đều là Object, và …. hiển nhiên Array cũng thế. JS không có kiểu array như trong C/C++, C#, Java, … thay vào đó, nó cung cấp cho chúng ta một loại object có những đặc điểm giống như một array thuần tuý . Chính vì điều này nên khi làm việc với array của javascript sẽ có tốc độ chậm hơn so với các ngôn ngữ khác nhưng bù lại nó khá tiện dụng trong khá nhiều trường hợp :))

Array Literals

Là một thứ như thế này [<value1>, <value2>, ..., <valuen-1>, <valuen>] hoặc [].  <value1> sẽ có tên là ‘0’, <value2> sẽ có tên là ‘1’, …..

Ví dụ:

Array trên kia sẽ tương tự với cái object sau đây (có cùng tên và các giá trị)

Sự khác biệt ở đây sẽ là. name_arr được thừa kế từ Array.prototype, còn name_obj được thừa kế từ Object.prototype. Chính vì sự thừa kế khác nhau này mà name_arr có thể sử dụng được nhiều phương thức được xây dựng cho array hơn là name_obj.

Một điều đặc biệt của array trong javascript đó là các phần tử của một array có thể khác nhau về kiểu dữ liệu

Ex:

Length

Mỗi array có một thuộc tính là length (độ dài) – là số phần tử có trong array. Nếu như ở hầu hết các ngôn ngữ khác thì khi ta thêm vào array một phần tử nào đó có chỉ số lớn hơn độ dài của array đó thì khi chạy chương trình sẽ bị crash, ví dụ như C++

Đối với javasccript thì điều đó sẽ khác, khi gặp một câu lệnh kiểu đó thì JS tự động kéo dài cái array ra để chứa được phần tử đó, ví dụ

Một đặc điểm của JS nữa đó là subscript của một phần tử (index trong các ngôn ngữ khác) nằm ở dạng string chứ không phải là integer nữa, toán tử [] sử dụng phương thức toString để chuyển các subscript đó sang string và sử dụng chúng như là tên của một giá trị trong array, đó là lý do tại sao ở trên mình gọi ‘0’, ‘1’ … là tên của phần tử <value1> <value2>

Length của một array trong JS có thể được thay đổi, ta có thể dùng name_arr.length = 10; … để thay đổi length của name_arr. Nếu ra thay đổi length nhỏ hơn số phần tử hiện tại thì các phần tử nằm ngoài cái length mới thay đổi sẽ bị xoá đi.

Sử dụng các đặc điểm của JS, ta có một cách khá tiện để thêm một phần tử vào array đã có như sau

Này khá tiện khi ta sử dụng trong vòng lặp và muốn thêm phần tử vào cuối array đã có. Một cách khác mạnh mẽ hơn có thể sử dụng đó là sử dụng phương thức của array prototype là push().

Delete

Ta có thể sử dụng toán tử delete để xoá một phần tử ra khỏi array:

Như ví dụ trên, khi sử dụng delete để xoá một phần tử ra khỏi array thì nó sẽ không dồn các phần tử ở sau tới mà tại vị trí bị xoá sẽ trở thành undefined. Không để ý thì lúc duyệt lại mảng kiểu gì cũng lòi ra bug :v

Để khắc phục nhược điểm trên của delete thì ta có thể dùng phương thức splice của Array.prototype 

array_name.splice(start_pos)

array_name.splice(start_pos, deleteCount)

array_name.splice(start_pos, deleteCount, item1, item2,....) 

Bạn có thể xem tham khảo chi tiết về splice đây

 

Leave a Reply

Your email address will not be published. Required fields are marked *