Khai báo một mảng trong javascript. Chuyển đổi một chuỗi thành một mảng - phân chia. phương thức pop() và shift()

Mảng

Mảng là một tập hợp các giá trị có thứ tự. Các giá trị trong mảng được gọi là phần tử và mỗi phần tử được đặc trưng bởi một vị trí số trong mảng, được gọi là chỉ mục. Mảng trong JavaScript không được gõ: các phần tử mảng có thể thuộc bất kỳ loại nào và các phần tử khác nhau của cùng một mảng có thể có các loại khác nhau. Các phần tử mảng thậm chí có thể là đối tượng hoặc các mảng khác, cho phép bạn tạo các cấu trúc dữ liệu phức tạp như mảng đối tượng và mảng mảng.

Các chỉ mục mảng JavaScript bắt đầu từ 0 và sử dụng số nguyên 32 bit - phần tử đầu tiên của mảng có chỉ mục 0. Mảng JavaScript rất linh hoạt: chúng có thể tăng và giảm kích thước khi cần thiết; không cần phải khai báo kích thước mảng cố định khi tạo chúng hoặc phân bổ lại bộ nhớ khi kích thước của chúng thay đổi.

Mảng trong JavaScript là một dạng đối tượng chuyên biệt và các chỉ mục mảng không chỉ có ý nghĩa gì ngoài tên thuộc tính, mà trùng hợp là các số nguyên.

Tạo mảng

Cách dễ nhất để tạo một mảng là sử dụng một hằng, là một danh sách đơn giản gồm các phần tử mảng được phân tách bằng dấu phẩy, được bao quanh bởi dấu ngoặc vuông. Các giá trị trong một hằng mảng không nhất thiết phải là hằng số - chúng có thể là bất kỳ biểu thức nào, bao gồm cả các hằng đối tượng:

Var trống = ; // Mảng trống var number = ; // Mảng 5 phần tử số var misc = [ 1.1, true, "a", ]; // 3 phần tử thuộc các loại khác nhau + dấu phẩy ở cuối var base = 1024; bảng var = ; // Mảng có các biến var arrObj = [, ]; // 2 mảng bên trong chứa các đối tượng

Cú pháp mảng bằng chữ cho phép bạn chèn dấu phẩy ở cuối tùy chọn, tức là. chữ [,] khớp với một mảng có hai phần tử, không phải ba phần tử.

Một cách khác để tạo mảng là gọi hàm tạo Mảng(). Bạn có thể gọi hàm tạo theo ba cách khác nhau:

    Gọi hàm tạo không có đối số:

    Var Array = new Array();

    Trong trường hợp này, một mảng trống sẽ được tạo, tương đương với mảng bằng chữ.

    Gọi hàm tạo với một đối số số duy nhất xác định độ dài của mảng:

    Var Array = Mảng mới(10);

    Trong trường hợp này, một mảng trống có độ dài được chỉ định sẽ được tạo. Hình thức gọi hàm tạo Array() này có thể được sử dụng để phân bổ trước bộ nhớ cho một mảng nếu biết trước số phần tử của nó. Lưu ý rằng điều này không lưu trữ bất kỳ giá trị nào trong mảng.

    Chỉ định rõ ràng các giá trị của hai phần tử mảng trở lên đầu tiên hoặc một phần tử không phải là số trong lệnh gọi hàm tạo:

    Var Array = new Array(5, 4, 3, 2, 1, "test");

    Trong trường hợp này, các đối số của hàm tạo trở thành giá trị của các phần tử của mảng mới. Sử dụng hằng mảng hầu như luôn dễ dàng hơn so với sử dụng hàm tạo Array().

Đọc và viết các phần tử mảng

Các phần tử mảng được truy cập bằng toán tử. Ở bên trái dấu ngoặc phải có tham chiếu mảng. Bên trong dấu ngoặc đơn phải có một biểu thức tùy ý trả về giá trị nguyên không âm. Cú pháp này hữu ích cho cả việc đọc và ghi giá trị của một phần tử mảng. Do đó, tất cả các hướng dẫn JavaScript sau đây đều hợp lệ:

// Tạo một mảng có một phần tử var arr = ["world"]; // Đọc phần tử 0 var value = arr; // Ghi giá trị vào phần tử 1 arr = 3.14; // Ghi giá trị vào phần tử 2 i = 2; mảng[i] = 3; // Ghi giá trị vào phần tử 3 arr = "hello"; // Đọc phần tử 0 và 2, ghi giá trị vào phần tử 3 arr] = arr;

Hãy để tôi nhắc bạn rằng mảng là một loại đối tượng chuyên biệt. Dấu ngoặc vuông dùng để truy cập các phần tử mảng hoạt động giống hệt như dấu ngoặc vuông dùng để truy cập các thuộc tính đối tượng. Trình thông dịch JavaScript chuyển đổi chỉ mục số trong dấu ngoặc đơn thành chuỗi—chỉ mục 1 trở thành chuỗi "1"—và sau đó sử dụng chuỗi làm tên thuộc tính.

Không có gì đặc biệt khi chuyển đổi chỉ mục số thành chuỗi: bạn có thể thực hiện tương tự với các đối tượng thông thường:

Var obj = (); // Tạo một đối tượng đơn giản obj = "one"; // Lập chỉ mục nó bằng số nguyên

Vấn đề về mảng là khi bạn sử dụng tên thuộc tính là số nguyên không âm, mảng sẽ tự động xác định giá trị của thuộc tính chiều dài. Ví dụ, ở trên chúng ta đã tạo một mảng arr với một phần tử duy nhất. Sau đó, nó gán giá trị cho các phần tử của nó tại các chỉ mục 1, 2 và 3. Kết quả của các thao tác này là giá trị thuộc tính độ dài của mảng thay đổi thành 4.

Bạn nên phân biệt rõ ràng các chỉ mục trong một mảng với tên thuộc tính đối tượng. Tất cả các chỉ mục đều là tên thuộc tính, nhưng chỉ những thuộc tính có tên được biểu thị bằng số nguyên mới là chỉ mục. Tất cả các mảng đều là đối tượng và bạn có thể thêm thuộc tính cho chúng bằng bất kỳ tên nào. Tuy nhiên, nếu bạn chạm vào các thuộc tính là chỉ mục mảng, mảng sẽ phản hồi bằng cách cập nhật giá trị của thuộc tính độ dài nếu cần.

Xin lưu ý rằng số âm và số không nguyên có thể được sử dụng làm chỉ số mảng. Trong trường hợp này, các số được chuyển đổi thành chuỗi, được sử dụng làm tên thuộc tính.

Thêm và xóa các phần tử mảng

Chúng ta đã thấy rằng cách dễ nhất để thêm các phần tử vào một mảng là gán giá trị cho các chỉ mục mới. Bạn cũng có thể sử dụng phương thức này để thêm một hoặc nhiều phần tử vào cuối mảng. xô():

Var mảng = ; // Tạo một mảng trống arr.push("zero"); // Thêm một giá trị vào cuối arr.push("one",2); // Thêm hai giá trị nữa

Bạn cũng có thể thêm phần tử vào cuối mảng bằng cách gán giá trị cho phần tử mảng. Để chèn một phần tử vào đầu mảng, bạn có thể sử dụng phương thức unshift(), di chuyển các phần tử hiện có trong mảng đến các vị trí có chỉ số cao hơn.

Bạn có thể xóa các phần tử mảng bằng toán tử xóa, giống như các thuộc tính đối tượng thông thường:

Var mảng = ; xóa mảng; 2 trong mảng; // sai, chỉ số 2 trong mảng không được xác định arr.length; // 3: toán tử xóa không thay đổi thuộc tính độ dài của mảng

Việc xóa một phần tử cũng tương tự (nhưng hơi khác một chút) với việc gán giá trị không xác định cho phần tử đó. Lưu ý rằng việc áp dụng toán tử xóa cho một phần tử mảng không làm thay đổi giá trị của thuộc tính độ dài hoặc dịch chuyển các phần tử có chỉ mục cao hơn xuống để lấp đầy khoảng trống còn lại bằng cách xóa phần tử.

Cũng có thể loại bỏ các phần tử ở cuối mảng bằng cách gán một giá trị mới cho thuộc tính length. Mảng có một phương thức nhạc pop()(ngược lại với phương thức push()), làm giảm độ dài của mảng đi 1 và trả về giá trị của phần tử bị loại bỏ. Ngoài ra còn có một phương pháp sự thay đổi()(ngược lại với phương thức unshift()), loại bỏ phần tử ở đầu mảng. Không giống như toán tử xóa, phương thức shift() dịch chuyển tất cả các phần tử xuống vị trí bên dưới chỉ mục hiện tại của chúng.

Cuối cùng cũng có một phương pháp đa mục đích mối nối(), cho phép bạn chèn, xóa và thay thế các phần tử mảng. Nó thay đổi giá trị của thuộc tính length và chuyển các phần tử mảng sang chỉ mục thấp hơn hoặc cao hơn nếu cần. Chúng ta sẽ xem xét tất cả các phương pháp này sau.

Mảng đa chiều

JavaScript không hỗ trợ mảng đa chiều "đúng", nhưng nó cung cấp một cách tốt để mô phỏng chúng bằng cách sử dụng mảng mảng. Để truy cập một phần tử dữ liệu trong một mảng mảng, chỉ cần sử dụng toán tử hai lần.

Ví dụ: giả sử ma trận biến là một mảng gồm nhiều mảng số. Mỗi phần tử của ma trận[x] là một mảng số. Để truy cập một số cụ thể trong một mảng, bạn có thể sử dụng biểu thức ma trận[x][y]. Dưới là ví dụ cụ thể, trong đó mảng hai chiều được sử dụng làm bảng nhân:

// Tạo mảng nhiều chiều var table = new Array(10); // Có 10 hàng trong bảng for(var i = 0; i

Các phương thức của lớp Array

Tiêu chuẩn ECMAScript 3 định nghĩa Array.prototype là một tập hợp chức năng tiện lợiđể làm việc với mảng, có sẵn dưới dạng phương thức của bất kỳ mảng nào. Những phương pháp này sẽ được trình bày ở các phần dưới đây.

phương thức tham gia ()

Phương thức Array.join() chuyển đổi tất cả các phần tử mảng thành chuỗi, nối chúng và trả về chuỗi kết quả. Là một đối số tùy chọn, bạn có thể truyền một chuỗi cho phương thức sẽ được sử dụng để phân tách các phần tử trong chuỗi kết quả. Nếu chuỗi phân cách không được chỉ định thì dấu phẩy sẽ được sử dụng. Ví dụ: đoạn sau dẫn đến chuỗi "1,2,3":

Var mảng = ; mảng.join(); // "1,2,3" arr.join("-"); // "1-2-3"

phương thức đảo ngược()

Phương thức Array.reverse() đảo ngược thứ tự các phần tử trong một mảng và trả về một mảng được sắp xếp lại. Hoán vị được thực hiện trực tiếp trong mảng ban đầu, tức là. Phương thức này không tạo một mảng mới với các phần tử được sắp xếp lại mà thay vào đó sắp xếp lại chúng trong một mảng đã tồn tại. Ví dụ: đoạn mã sau, sử dụng các phương thức Reverse() và join(), sẽ tạo ra chuỗi "3,2,1":

Var mảng = ; arr.reverse().join(); // "3,2,1"

phương thức sắp xếp()

Phương thức Array.sort() sắp xếp các phần tử trong mảng nguồn và trả về mảng đã sắp xếp. Nếu phương thức Sort() được gọi mà không có đối số, việc sắp xếp sẽ được thực hiện theo thứ tự bảng chữ cái (các phần tử tạm thời được chuyển đổi thành chuỗi để so sánh nếu cần). Các phần tử không xác định sẽ được chuyển xuống cuối mảng.

Để sắp xếp theo thứ tự khác với thứ tự bảng chữ cái, bạn có thể chuyển hàm so sánh làm đối số cho phương thức Sort(). Hàm này thiết lập đối số nào trong hai đối số của nó sẽ đứng đầu trong danh sách được sắp xếp. Nếu đối số thứ nhất phải đứng trước đối số thứ hai thì hàm so sánh phải trả về một số âm. Nếu đối số đầu tiên theo sau đối số thứ hai trong một mảng được sắp xếp thì hàm phải trả về một số lớn hơn 0. Và nếu hai giá trị tương đương nhau (nghĩa là thứ tự của chúng không quan trọng), hàm so sánh sẽ trả về 0:

Var mảng = ; mảng.sort(); // thứ tự bảng chữ cái: 1111, 222, 33, 4 arr.sort(function(a,b) ( // Thứ tự số: 4, 33, 222, 1111 trở lại a-b; // Trả về giá trị 0 // tùy theo thứ tự sắp xếp của a và b )); // Sắp xếp theo hướng ngược lại, từ lớn nhất đến nhỏ nhất arr.sort(function(a,b) (return b-a));

Hãy lưu ý rằng việc sử dụng một hàm không tên trong đoạn mã này sẽ thuận tiện như thế nào. Chức năng so sánh chỉ được sử dụng ở đây nên không cần đặt tên cho nó.

phương thức concat()

Phương thức Array.concat() tạo và trả về một mảng mới chứa các phần tử của mảng ban đầu mà concat() được gọi và các giá trị của bất kỳ đối số nào được truyền cho concat(). Nếu bất kỳ đối số nào trong số này là một mảng thì các phần tử của nó sẽ được thêm vào mảng trả về. Tuy nhiên, cần lưu ý rằng việc chuyển đổi đệ quy một mảng các mảng thành mảng một chiều không xảy ra. Phương thức concat() không thay đổi mảng ban đầu. Dưới đây là một số ví dụ:

Var mảng = ; mảng.concat(4, 5); // Return arr.concat(); // Return arr.concat(,) // Return arr.concat(4, ]) // Return ]

phương thức slice()

Phương thức Array.slice() trả về một lát hoặc mảng con của mảng đã chỉ định. Hai đối số của phương thức chỉ định điểm bắt đầu và kết thúc của đoạn được trả về. Mảng được trả về chứa phần tử có số được chỉ định trong đối số thứ nhất, cộng với tất cả các phần tử tiếp theo, tối đa (nhưng không bao gồm) phần tử có số được chỉ định trong đối số thứ hai.

Nếu chỉ đưa ra một đối số, mảng trả về chứa tất cả các phần tử từ vị trí bắt đầu đến cuối mảng. Nếu bất kỳ đối số nào là âm, nó sẽ xác định số phần tử tương ứng với phần cuối của mảng. Vì vậy, đối số -1 tương ứng với phần tử cuối cùng của mảng và đối số -3 tương ứng với phần tử thứ ba của mảng tính từ cuối. Dưới đây là một số ví dụ:

Var mảng = ; mảng.slice(0,3); // Return arr.slice(3); // Return arr.slice(1,-1); // Return arr.slice(-3,-2); // Trở lại

phương thức mối nối()

Phương thức Array.splice() là phương pháp phổ quát, để chèn hoặc xóa các phần tử khỏi một mảng. Không giống như các phương thức slice() và concat(), phương thức splice() sửa đổi mảng ban đầu mà nó được gọi. Lưu ý rằng các phương thức splice() và slice() có tên rất giống nhau nhưng thực hiện các thao tác hoàn toàn khác nhau.

Phương thức splice() có thể loại bỏ các phần tử khỏi một mảng, chèn các phần tử mới hoặc thực hiện cả hai cùng một lúc. Các phần tử mảng được dịch chuyển khi cần thiết để tạo ra một chuỗi liên tục sau khi chèn hoặc xóa.

Đối số đầu tiên của phương thức splice() chỉ định vị trí trong mảng mà việc chèn và/hoặc xóa sẽ được thực hiện. Đối số thứ hai chỉ định số phần tử cần loại bỏ (cắt) khỏi mảng. Nếu đối số thứ hai bị bỏ qua, tất cả các phần tử mảng từ phần được chỉ định đến cuối mảng sẽ bị xóa. Phương thức splice() trả về một mảng gồm các phần tử đã bị loại bỏ hoặc (nếu không có phần tử nào bị xóa) một mảng trống.

Hai đối số đầu tiên của phương thức splice() chỉ định các phần tử mảng cần loại bỏ. Theo sau các đối số này có thể là bất kỳ số lượng đối số bổ sung nào chỉ định các phần tử sẽ được chèn vào mảng, bắt đầu từ vị trí được chỉ định trong đối số đầu tiên.

Var mảng = ; mảng.splice(4); // Return , arr = arr.splice(1,2); // Return , arr = arr.splice(1,1); // Trở lại ; mảng = mảng = ; arr.splice(2,0,"a","b"); // Trở lại ; mảng =

Phương thức push() và pop()

Các phương thức push() và pop() cho phép bạn làm việc với các mảng như thể chúng là các ngăn xếp. Phương thức push() thêm một hoặc nhiều phần tử mới vào cuối mảng và trả về độ dài mới của mảng. Phương thức pop() thực hiện hoạt động ngược lại- loại bỏ phần tử cuối cùng của mảng, giảm độ dài của mảng và trả về giá trị mà nó đã loại bỏ. Lưu ý rằng cả hai phương pháp này đều sửa đổi mảng ban đầu thay vì tạo bản sao đã sửa đổi của mảng đó.

phương thức unshift() và shift()

Các phương thức unshift() và shift() hoạt động gần giống như push() và pop(), ngoại trừ việc chúng chèn và xóa các phần tử ở đầu mảng thay vì ở cuối mảng. Phương thức unshift() chuyển các phần tử hiện có sang các chỉ mục lớn hơn để giải phóng không gian, thêm phần tử hoặc các phần tử vào đầu mảng và trả về độ dài mới của mảng. Phương thức shift() loại bỏ và trả về phần tử đầu tiên của mảng, dịch chuyển tất cả các phần tử tiếp theo xuống một vị trí để chiếm khoảng trống ở đầu mảng.

Hãy cùng tìm hiểu cách lập chỉ mục các mảng trong js, loại bỏ và thêm các phần tử của chúng.

Mảng trong JavaScript là một đối tượng toàn cục được thiết kế để lưu trữ danh sách các giá trị.

Nó tương tự như các biến khác ở chỗ nó có thể lưu trữ bất kỳ loại dữ liệu nào. Nhưng mảng có một sự khác biệt quan trọng từ một biến: nó có thể lưu trữ nhiều phần tử cùng một lúc.

Mảng là một tập hợp các giá trị có thứ tự. Mỗi giá trị được gọi là một phần tử và có số riêng, được gọi là chỉ mục.

Một phần tử bên trong mảng có thể thuộc bất kỳ kiểu nào. Hơn nữa, các phần tử của một mảng có thể có nhiều kiểu khác nhau: số, chuỗi, cổng logic và thậm chí cả các đối tượng hoặc mảng khác.

Thứ tự các phần tử mảng bắt đầu từ 0. Hóa ra mảng sẽ luôn có chỉ số được bù bằng một: phần tử đầu tiên sẽ có chỉ số 0, phần tử thứ hai sẽ có chỉ số 1, v.v.

Dưới đây là một ví dụ về một mảng có các phần tử thuộc các loại khác nhau:

Tạo (khai báo) một mảng

Mảng rất tiện lợi vì chúng có thể lưu trữ bao nhiêu dữ liệu bạn cần. Kích thước tối đa có thể có của mảng js là 2 32 phần tử.

Chúng ta cần nói với JavaScript rằng chúng ta muốn tạo một mảng. Có hai lựa chọn cho việc này: giá trị trong ngoặc vuông hoặc từ khóa mới.

Ký hiệu ngắn: sử dụng dấu ngoặc vuông

Danh sách các giá trị được phân tách bằng dấu phẩy được đặt trong dấu ngoặc vuông.

var myArray = [ "Jack", "Sawyer", "John", "Desmond" ];

Nội dung của mảng được xác định bởi nội dung nằm giữa dấu ngoặc vuông. Mỗi giá trị được phân tách bằng dấu phẩy.

Các giá trị được chỉ định giống như các biến đơn giản, tức là các chuỗi phải được khai báo kèm theo dấu ngoặc kép, v.v.

Để khai báo một mảng trống, hãy để trống dấu ngoặc đơn:

var myArray = ;

Mục nhập dài: sử dụng hàm tạo Array()

var lostArray = new Array("Jack", "Sawyer", "John", "Desmond"); var TwinPeaksArray = new Array("Laura", 2, ["Bob", "Leland", "Dale"]);

Từ khóa mới yêu cầu JavaScript tạo một mảng mới có các giá trị được truyền dưới dạng tham số.

Nếu bạn biết trước có bao nhiêu phần tử trong mảng của mình, bạn có thể chuyển ngay giá trị này vào hàm tạo.

var myArray = Mảng mới(80);

Biểu thức trên sẽ tạo một mảng trống gồm 80 vị trí có giá trị không xác định.

Khai báo một mảng trống:

var myArray = new Array();

Truy cập các phần tử mảng

Bằng cách sử dụng chỉ mục của từng phần tử, bạn có thể làm việc với bất kỳ dữ liệu nào trong mảng, truy cập dữ liệu đó bằng toán tử:

var myArray = ["Jack", "Sawyer", "John", "Desmond"]; console.log(myArray); // In ra “Jack” console.log(myArray); // In “Desmond”

Một mảng có thể có nhiều cấp độ, nghĩa là mỗi phần tử có thể là một mảng. Kết quả sẽ là mảng js hai chiều. Làm cách nào chúng ta có thể truy cập vào các mảng nằm bên trong các mảng khác - “ mảng đa chiều»?

Ví dụ: hãy xem xét một mảng đại diện cho một họ. Những đứa trẻ từ họ này được ghi vào một mảng riêng biệt bên trong mảng chính:

var familyArray = ["Marge", "Homer", ["Bart", "Lisa", "Maggie"]];

Bạn có thể tưởng tượng nó như thế này:

Để tham khảo giá trị "Lisa":

var lisa = familyArray; console.log(lisa); // in "Lisa"

Điều này có thể được tiếp tục gần như vô thời hạn, cho phép bạn lưu trữ các tập dữ liệu lồng nhau trong mảng và truy cập chúng bằng cách sử dụng các chỉ mục.

Thêm các phần tử vào một mảng

Chúng tôi đã tìm ra cách truy cập các phần tử mảng bằng cách sử dụng các chỉ mục tương ứng của chúng. Theo cách tương tự, bạn có thể thêm (hoặc thay đổi) các phần tử bằng cách khai báo, ví dụ:

var myArray = ["Kate", "Mặt trời"]; myArray = "Juliet"; console.log(myArray); // In "Kate, Sun, Juliet"

Điều gì xảy ra nếu tôi khai báo một phần tử có chỉ mục không có phần tử nào khác trước nó? Bản thân mảng sẽ tạo tất cả các phần tử còn thiếu và gán cho chúng giá trị unfind :

var myArray = ["Kate", "Mặt trời"]; myArray = "Juliet"; console.log(myArray.length); // In ra "6" console.log(myArray); // In ["Kate", "Sung", không xác định, không xác định, không xác định, "Juliet"]

Bạn có thể tìm hiểu độ dài của mảng js bằng cách sử dụng thuộc tính length. Trong ví dụ trên, có sáu phần tử trong mảng và ba trong số chúng chưa được gán giá trị - chúng được đánh dấu là không xác định.

phương thức đẩy()

Sử dụng phương thức push(), bạn có thể thêm một hoặc nhiều phần tử vào mảng js. Đẩy() chấp nhận số lượng không giới hạn các tham số, tất cả chúng sẽ được thêm vào cuối mảng.

var myArray = ["Kate", "Sut"]; myArray.push("Juliet"); // Thêm phần tử "Juliet" vào cuối mảng myArray.push("Libby", "Shannon"); // Thêm phần tử "Libby" và "Shannon" vào cuối mảng console.log(myaArray ); // In ["Kate", "Sớm", "Juliet", "Libby", "Shannon"]

phương thức unshift()

Phương thức unshift() hoạt động tương tự như push(), ngoại trừ việc nó thêm các phần tử vào đầu mảng.

var myArray = ["Kate", "Mặt trời"]; myArray.unshift("Juliet"); // Thêm phần tử "Juliet" vào đầu mảng myArray.unshift("Libby", "Shannon"); // Thêm các phần tử "Libby" và "Shannon" vào đầu mảng console.log(myArray); // Kết quả đầu ra ["Libby", "Shannon", "Juliet", "Kate", "Soon"]

Loại bỏ các phần tử mảng

phương thức pop() và shift()

Các phương thức pop() và shift() lần lượt loại bỏ phần tử cuối cùng và đầu tiên của một mảng:

var myArray = ["Jack", "Sawyer", "John", "Desmond", "Kate"]; myArray.pop(); // Loại bỏ phần tử "Kate" myArray.shift(); // Loại bỏ phần tử "Jack" console.log(myArray); // In ra ["Sawyer", "John", "Desmond"]

phương thức mối nối()

Sử dụng phương thức splice(), bạn có thể xóa hoặc thêm các phần tử vào một mảng trong khi chỉ định chính xác chỉ mục của các phần tử.

Trong ví dụ sau, phương thức splice() thêm hai phần tử bắt đầu từ chỉ mục 2 ( nghĩa là từ phần tử thứ ba):

var FruitArray = ["táo", "đào", "cam", "chanh", "chanh", "anh đào"]; FruitArray.splice(2, 0, "dưa", "chuối"); console.log(fruitArray); // Kết quả đầu ra ["táo", "đào", "dưa", "chuối", "cam", "chanh", "chanh", "anh đào"]

Tham số đầu tiên của phương thức splice() là chỉ mục. Nó cho biết vị trí nào cần thêm/xóa các phần tử. Trong ví dụ của chúng tôi, chúng tôi đã chọn chỉ số 2 ( có nghĩa là "màu cam").

Tham số thứ hai là số phần tử cần loại bỏ. Chúng tôi đã chỉ định giá trị là 0 nên sẽ không có gì bị xóa.

Các thông số sau đây là tùy chọn. Họ thêm các giá trị mới vào mảng. Trong trường hợp của chúng tôi, chúng tôi cần thêm “dưa” và “chuối”, bắt đầu từ chỉ số 2.

Mảng là gì

Mảng là kiểu dữ liệu lưu trữ các giá trị được đánh số. Mỗi giá trị được đánh số được gọi là một phần tử mảng và số mà phần tử liên kết với được gọi là chỉ mục của nó. Mảng JavaScript không được định kiểu, có nghĩa là một phần tử của mảng có thể thuộc bất kỳ loại nào và các phần tử khác nhau của cùng một mảng có thể có các kiểu khác nhau. Ngoài ra, mảng JavaScript là động, có nghĩa là không cần khai báo kích thước cố định và có thể thêm các phần tử mới bất kỳ lúc nào.

Tạo một mảng

Một mảng có thể được tạo theo hai cách, cách thứ nhất là tạo một mảng bằng cách sử dụng một mảng bằng chữ - dấu ngoặc vuông, bên trong có danh sách các phần tử được phân tách bằng dấu phẩy.

Var trống = ; // mảng trống var number = ; //mảng 5 phần tử số var diff = ; // mảng có 3 phần tử nhiều loại khác nhau

Các giá trị không nhất thiết phải đơn giản (số hoặc chuỗi) - chúng cũng có thể là bất kỳ biểu thức nào khác, ví dụ: đối tượng bằng chữ, mảng hoặc hàm khác.

Số thứ tự = 700; var tab = , num + 1];

Cách thứ hai để tạo mảng là gọi hàm tạo Array(). Có ba cách để gọi hàm tạo Array().

  • Gọi một hàm tạo không có đối số:
var b = new Array();

Trong trường hợp này, một mảng trống được tạo, tương đương với một chữ trống.

  • Hàm tạo chỉ định rõ ràng các giá trị của n phần tử mảng:
var b = new Array(1, 3, 5, 8, "string", true);

Trong trường hợp này, hàm tạo nhận được một danh sách các đối số trở thành các phần tử của mảng mới. Các đối số được ghi vào mảng theo thứ tự chúng được chỉ định.

  • Phân bổ không gian để gán giá trị sau này. Điều này được thực hiện bằng cách chỉ định một số trong ngoặc đơn khi xác định một mảng:
var b = Mảng mới(5);

Phương pháp xác định mảng này liên quan đến việc phân bổ mảng một số phần tử nhất định (mỗi phần tử có giá trị không xác định) và sau đó gán các giá trị khi tập lệnh tiến triển. Biểu mẫu này thường được sử dụng để phân bổ trước một mảng nếu biết trước độ dài của nó.

Đọc, viết và thêm các phần tử mảng

Các phần tử mảng được truy cập bằng toán tử. Các phần tử mảng trong JavaScript được đánh số bắt đầu từ 0. Để có được phần tử mảng mong muốn, bạn cần chỉ ra số của nó trong ngoặc vuông.

Số biến = ; document.write(số + ", "); //phần tử đầu tiên của mảng document.write(numbers + ", "); //phần tử thứ hai của mảng document.write(numbers + ", "); //phần tử thứ ba của mảng document.write(numbers); //phần tử thứ tư của mảng

Các phần tử mảng có thể được thay đổi:

Số biến = ; số = 10; // đã thay đổi phần tử đầu tiên của mảng -

Thêm phần tử mới mảng, chỉ cần gán một giá trị mới:

Số biến = ; số = 7; //đã trở thành

Lưu ý: trong Mảng JavaScript bất kỳ số lượng phần tử thuộc bất kỳ loại nào có thể được lưu trữ.

Độ dài mảng

Tất cả các mảng, dù được tạo bằng cách sử dụng hàm tạo Array() hay được xác định bằng cách sử dụng hằng mảng, đều có thuộc tính độ dài đặc biệt trả về Tổng số các phần tử được lưu trữ trong một mảng. Vì mảng có thể có các phần tử không xác định (những phần tử có giá trị không xác định), nên một công thức chính xác hơn là thuộc tính độ dài luôn lớn hơn một chỉ số (số) lớn nhất của phần tử mảng. Thuộc tính độ dài được cập nhật tự động, vẫn chính xác khi các phần tử mới được thêm vào mảng.

Var v = mảng mới(); // v.length == 0 (không có phần tử nào được xác định) v = new Array(1,2,3); // v.length == 3 (các phần tử được xác định từ 0–2) v = ; // v.length == 2 (các phần tử 0 và 1 được xác định) document.write(v.length);

Để lấy phần tử cuối cùng của mảng, bạn cũng có thể sử dụng thuộc tính length:

Var v = ["JavaScript", "Thuộc tính", "Mảng"]; tài liệu.write(v);

Phần tử cuối cùng có chỉ số 1 nhỏ hơn độ dài của mảng, vì số đếm bắt đầu từ 0. Do đó, nếu bạn không biết chính xác số phần tử mà cần tham khảo phần tử cuối cùng của mảng thì hãy sử dụng mục: v.length - 1.

Lặp qua các phần tử mảng

Cách sử dụng phổ biến nhất của thuộc tính length là lặp qua các phần tử mảng:

Ví dụ này giả định rằng các phần tử của mảng là liền kề nhau và bắt đầu ở phần tử đầu tiên (chỉ số 0). Nếu không đúng như vậy, trước khi truy cập từng phần tử của mảng, bạn cần kiểm tra xem nó có được xác định hay không:

Var trái cây = ["táo", "chuối", "dâu", "đào"]; for(var i = 0; i

Một vòng lặp cũng có thể được sử dụng để khởi tạo các phần tử mảng:

Thanh Var = Mảng mới (10); for(var i = 0; i

Cắt ngắn và phát triển một mảng

Khi làm việc với mảng, thuộc tính length được tự động cập nhật nên chúng ta không phải lo lắng về nó. Nhưng có một điều đáng nói là thuộc tính length không chỉ có sẵn để đọc mà còn có thể viết. Nếu thuộc tính độ dài được đặt thành giá trị nhỏ hơn giá trị hiện tại, mảng sẽ bị cắt bớt theo độ dài mới (được chỉ định), mọi phần tử không nằm trong phạm vi chỉ mục mới sẽ bị loại bỏ và giá trị của chúng bị mất, ngay cả khi độ dài là sau đó được trả về, các giá trị sẽ không được khôi phục.

Var foo = ; foo.length = 1; // rút ngắn còn 1 phần tử - foo.length = 4; //khôi phục số phần tử trước đó document.write(foo); // không có giá trị trước đó

nhất một cách đơn giản xóa mảng sẽ là: foo.length = 0.

Nếu thuộc tính độ dài được đặt lớn hơn giá trị hiện tại của nó, các phần tử không xác định mới sẽ được thêm vào cuối mảng, tăng mảng lên kích thước đã chỉ định.

Loại bỏ các phần tử mảng

Toán tử xóa ghi giá trị không xác định vào một phần tử mảng, trong khi phần tử đó vẫn tiếp tục tồn tại. Để loại bỏ các phần tử để các phần tử còn lại được chuyển sang không gian trống, bạn phải sử dụng một trong các phương thức mảng được xác định trước. Phương thức Array.shift() loại bỏ phần tử đầu tiên của mảng, pop() loại bỏ phần tử cuối cùng của mảng, splice() loại bỏ một hoặc một phạm vi phần tử ở bất kỳ đâu trong mảng. Cách sử dụng các phương pháp này sẽ được mô tả chi tiết trong chương tiếp theo.

Mảng đa chiều

Hãy nhớ lại rằng mảng JavaScript có thể chứa các mảng khác dưới dạng phần tử. Tính năng này có thể được sử dụng để tạo mảng đa chiều. Để truy cập các phần tử trong mảng mảng, bạn chỉ cần sử dụng dấu ngoặc vuông hai lần.

Ma trận Var = [ , , ]; document.write(ma trận); // phần tử trung tâm được chọn

Hãy xem những gì được viết trong ví dụ: ma trận là một mảng gồm các mảng số. Bất kỳ phần tử nào của ma trận [n] đều là một mảng số. Để truy cập một số cụ thể trong một mảng, bạn cần viết ma trận [n] [n], dấu ngoặc vuông thứ hai cho biết chỉ số của phần tử của mảng bên trong.

//tương tự với mục trước - tạo bằng cách sử dụng hàm tạo var table = new Array(3); for(var i = 0; i

Mảng kết hợp

Các đối tượng có thể được sử dụng như mảng kết hợp. Một lý thuyết nhỏ - mảng kết hợp (còn gọi là bảng băm) cho phép bạn sử dụng chuỗi thay vì chỉ mục. Sử dụng mảng kết hợp rất giống với việc sử dụng tên thuộc tính vật bình thường, nhưng trong trong trường hợp này khi làm việc ở định dạng mảng. Vì JavaScript không có các phương thức để làm việc với mảng kết hợp nên chúng được sử dụng ít thường xuyên hơn so với các mảng thông thường, mặc dù chúng cũng có thể hữu ích trong việc lưu trữ thông tin và giúp dễ nhớ các phần tử cần truy cập hơn.

Var s_list = Đối tượng mới(); s_list["béo"] = "Béo"; s_list["nhỏ"] = "Nhỏ"; s_list["name"] = "Homer"; for (var x in s_list) //hiển thị tất cả các phần tử document.write(s_list[x] + "
");

Trong bài viết này chúng ta sẽ xem xét một mảng JavaScript và các thành phần của nó. JavaScript được thiết kế lý tưởng cho việc lập trình. Trên thực tế, nó triển khai ngôn ngữ ECMAScript (tiêu chuẩn ECMA-262).

JavaScript được sử dụng ở đâu? Nó được sử dụng như một ngôn ngữ nhúng để xác định đường dẫn chương trình đến chủ đề ứng dụng. Nó có thể được tìm thấy trong các trình duyệt nơi nó được sử dụng làm ngôn ngữ kịch bản giúp các trang web có tính tương tác.

Các tính năng kiến ​​​​trúc quan trọng nhất của sản phẩm này là gõ động và gõ yếu, quản lý bộ nhớ tự động, lập trình hoàn hảo và các chức năng đối tượng hạng nhất.

Nói chung, JavaScript bị ảnh hưởng lý do khác nhau, bởi vì trong quá trình phát triển họ muốn tạo ra một ngôn ngữ tương tự như Java nhưng dễ dàng cho các lập trình viên sử dụng. Nhân tiện, ngôn ngữ JavaScript không thuộc sở hữu của bất kỳ công ty hoặc tổ chức nào, điều này khiến nó không giống một số phong cách lập trình được các nhà phát triển web sử dụng.

Cần lưu ý rằng JavaScript là nhãn hiệu đã đăng ký của Tập đoàn Oracle.

Mảng là gì?

Mảng là mảng lưu trữ các giá trị được đánh số. Mỗi giá trị như vậy được gọi là thành phần mảng và chữ số mà thành phần được liên kết được gọi là chỉ mục. Mảng JavaScript chưa được gõ. Điều này có nghĩa là các phần tử của mảng có thể thuộc bất kỳ kiểu nào và nhiều chi tiết khác nhau, thuộc cùng một mảng, có kiểu dữ liệu hoàn toàn khác nhau.

Ngoài ra, mảng JavaScript là mảng động, nghĩa là không cần khai báo kích thước cố định. Rốt cuộc, bạn có thể thêm chi tiết mới bất cứ lúc nào.

Sản xuất mảng

sử dụng Ngôn ngữ JavaScript, việc tạo một mảng không hề khó chút nào. Có hai phương pháp cho việc này. Việc đầu tiên liên quan đến việc tạo một mảng bằng cách sử dụng dấu ngoặc vuông, bên trong là danh sách các phần, được phân tách bằng dấu phẩy.

  • var trống = ; // mảng trống;
  • số var = ; // mảng có năm thành phần số;
  • var khác = ; // mảng gồm 3 phần tử có kiểu khác nhau.

Thông thường, các giá trị ở đây không bắt buộc phải đơn giản (chuỗi và số). Nó cũng có thể là bất kỳ biểu thức nào khác, ví dụ: chủ đề bằng chữ, các hàm và mảng khác.

Cách thứ hai để tạo một mảng là gọi trình thiết kế Array(). Bạn có thể mời anh ấy theo ba cách:

  • Gọi nhà thiết kế không có đối số: var b - new Array(). Điều này cung cấp cho việc tạo ra một mảng trống, tương đương với một chữ trống.
  • Hàm tạo xác định rõ ràng giá trị của n thành phần của mảng: var b = new Array (1, 3, 5, 8, “string”, true). Trong trường hợp này, người thiết kế sẽ thấy một danh sách các đối số được chuyển thành các thành phần của một mảng mới. Các đối số được ghi vào mảng ở vị trí mà chúng được chỉ định.
  • Xác định vùng để gán giá trị tiếp theo. Điều này được thực hiện bằng cách chỉ định khi xác định một mảng gồm một số được đặt trong dấu ngoặc tròn: var b = Mảng mới(5). Phương pháp này phát hiện liên quan đến việc phân bổ cho một mảng số lượng yêu cầu các thành phần (mỗi thành phần được liệt kê là không xác định) với khả năng gán giá trị sau đó trong quá trình trình bày. Biểu mẫu này thường được sử dụng để phân bổ trước một mảng Javascript có độ dài được biết trước.

Viết, đọc và thêm chi tiết mảng

Bạn có thể truy cập các thành phần của một mảng bằng toán tử. Nhân tiện, tất cả các thành phần trong JavaScript, bắt đầu từ số 0, đều được đánh số. Để có được phần tử cần thiết, số của nó được chỉ định trong Thông thường, các chi tiết có thể được thay đổi. Và để thêm JavaScript vào mảng, bạn chỉ cần gán một giá trị mới.

Cần lưu ý rằng mảng JavaScript có thể lưu trữ bất kỳ số lượng phần tử nào.

Độ dài mảng

Vì vậy, chúng ta biết rằng độ dài của một mảng nói chung là một hiện tượng thú vị. Chúng ta hãy xem xét nó chi tiết hơn. Tất cả các mảng, dù được xây dựng bằng trình thiết kế Array() hay được hiển thị thông qua hằng mảng, đều có thuộc tính độ dài cụ thể cho biết tổng số phần tử được lưu trữ. Vì một mảng có thể chứa các phần không xác định (ký hiệu là không xác định), nên một biểu thức chính xác hơn là: chất lượng độ dài luôn lớn hơn một phần lớn nhất phòng lớn(chỉ mục) của thành phần mảng. Chất lượng chiều dài được điều chỉnh tự động, duy trì độ chính xác khi các phần mới xuất hiện trong mảng.

Để làm cho thành phần cuối cùng của mảng xuất hiện, bạn có thể sử dụng thuộc tính length.

Phần cuối cùng có chỉ số nhỏ hơn kích thước mảng một. Rốt cuộc, việc đếm ngược luôn bắt đầu lại từ đầu. Ôi, JavaScript này! Độ dài của mảng phụ thuộc vào số phần tử chính xác. Vì vậy, nếu bạn không biết nên có bao nhiêu nhưng cần truy cập vào phần tử cuối cùng của mảng thì bạn cần sử dụng ký hiệu: v.length - 1.

Lặp lại các chi tiết mảng

Thuộc tính độ dài rất thường được sử dụng để lặp lại các chi tiết của một mảng trong một vòng lặp:

  • var Fruits = [“dâu”, “đào”, “táo”, “chuối”];
  • for(var I = 0; i< fruits.lenght; i++);
  • document.write(fruits[i] + "...").

Trong ví dụ này, các thành phần dường như được đặt liên tục và bắt đầu với phần đầu tiên có chỉ số bằng 0. Nếu không, trước khi gọi từng phần tử của mảng, bạn cần kiểm tra xem nó đã được xác định chưa.

Một vòng lặp đôi khi cũng được sử dụng để khởi tạo các thành phần.

Phát triển và cắt bớt một mảng

Tôi tự hỏi làm thế nào để sử dụng lưỡi Chuỗi JavaScript thêm vào mảng? Khi chúng tôi làm việc với mảng, độ dài chất lượng sẽ tự động được cải thiện, đó là lý do tại sao chúng tôi phải tự mình xử lý vấn đề này. Cần phải nhớ một chi tiết - thuộc tính độ dài không chỉ có thể đọc được mà còn có thể ghi được. Nếu chất lượng độ dài được gán một giá trị có kích thước nhỏ hơn giá trị hiện tại thì mảng sẽ giảm xuống kích thước đã chỉ định. Bất kỳ thành phần nào không có trong phạm vi chỉ mục mới đều bị loại bỏ và giá trị của chúng bị mất, ngay cả khi độ dài được trả về sau đó - các giá trị không được khôi phục.

Rất dễ dàng để xóa một mảng như thế này: foo.length = 0.

Nếu chất lượng độ dài được thực hiện lớn hơn giá trị hiện tại của nó, các phần mới không xác định sẽ xuất hiện ở cuối mảng, điều này sẽ làm tăng kích thước mong muốn.

Loại bỏ các phần mẫu

Toán tử xóa chỉ định một giá trị không xác định trong một thành phần mảng, nhưng nó vẫn tiếp tục tồn tại. Nếu bạn cần xóa một phần tử của mảng JavaScript để các phần còn lại được chuyển vào không gian trống, bạn cần sử dụng một trong các phương thức mảng được cung cấp. Phương thức Array.shift() loại bỏ thành phần đầu tiên, pop() loại bỏ thành phần cuối cùng và phương thức splice() loại bỏ một hoặc một phạm vi thành phần ở bất kỳ đâu trong mảng.

Mảng đa chiều

Có vẻ như chúng ta đã sắp xếp được mọi thứ một chút Mảng hai chiều- đó là điều cần được xem xét tiếp theo. Bạn có nhớ rằng mảng JavaScript có thể chứa các phần tử khác làm thành phần không? Tính năng này được sử dụng để tạo ra các mảng đa chiều. Để truy cập các thành phần trong một mảng, chỉ cần sử dụng dấu ngoặc vuông hai lần.

Mảng kết hợp

Bây giờ hãy khám phá cách sử dụng mảng kết hợp đặc trưng của JavaScript. Để làm được điều này, chúng ta cần xem xét lý thuyết: mảng kết hợp đôi khi được gọi là bảng băm. Nhờ chúng, các chuỗi được sử dụng thay vì chỉ mục. Việc sử dụng các cấu trúc như vậy cũng tương tự như việc sử dụng tên thuộc tính của một đối tượng đơn giản, nhưng trong tùy chọn này khi thực hiện công việc ở định dạng mảng. Vì JavaScript thiếu cách để hoạt động với mảng kết hợp nên chúng được sử dụng ít thường xuyên hơn so với các mảng thông thường. Cần lưu ý rằng chúng vẫn có thể hữu ích cho việc lưu trữ dữ liệu và giúp bạn dễ dàng ghi nhớ các chi tiết cần truy cập hơn.

Đầu ra mảng

Bây giờ chúng ta sẽ học gì về JavaScript? Hiển thị mảng trong hộp thoại (trên màn hình điều khiển), cũng như hiển thị giá trị của các thành phần mảng.

Nếu bạn cần hiển thị giá trị của tất cả các thành phần trong một chương trình thì sử dụng câu lệnh for sẽ rất thuận tiện. Điều thú vị là biến đếm for Rules được sử dụng làm chỉ mục của một thành phần mảng.

Làm sạch

Để lọc một mảng JavaScript, bạn cần đặt lại độ dài của nó về 0:

  • var myArray = ;
  • myArray.length = 0.
  • xóa: hàm() (;
  • this.length = 0;
  • trả lại cái này;

Thêm và xóa các thành phần

Vâng, chúng ta hãy tiếp tục nghiên cứu điều này hơn nữa. ngôn ngữ thú vị nhất JavaScript. Một phần tử mảng có thể được xóa hoặc thêm theo cách tương tự như các thuộc tính thông thường của các đối tượng khác. Nhưng có một số khác biệt: việc thêm thuộc tính số có thể thay đổi chất lượng độ dài và việc sửa đổi thuộc tính độ dài có thể loại bỏ chất lượng số. Về nguyên tắc, thuật toán thiết lập chất lượng cho mảng như sau:

  • Khi thêm một thuộc tính số chưa biết i, nếu độ dài bằng hoặc nhỏ hơn i thì độ dài được xác định là i+1.
  • Khi thay đổi độ dài chất lượng, những hành động sau: nếu giá trị được gán nhỏ hơn 0 thì RangeError sẽ được đưa ra. Tất cả các đặc tính số và chỉ số bằng với độ dài mới và lớn hơn đều bị loại bỏ.

Nói chung, việc xóa một phần tử của mảng JavaScript không khó. Rốt cuộc, ngay cả khi thiết lập độ dài, bạn cần phải loại bỏ các thành phần "phụ" khỏi nó. Điều này dẫn đến tùy chọn làm sạch mảng. Nếu vì lý do nào đó, biến được gán của một mảng mới trống không thỏa đáng và cần phải đặt lại biến hiện tại, thì việc gán giá trị 0 cho chất lượng độ dài của nó là đủ.

các phương thức unshift, shift, pop và push

Mặc dù các thành phần mảng được sửa đổi theo cách thủ công nhưng nhiều người khuyên bạn nên sử dụng các phương thức tích hợp sẵn cho việc này. Sắc thái này đảm bảo giá trị chất lượng độ dài chính xác và không có khoảng trống trong mảng. Nhân tiện, chất lượng độ dài chính xác sẽ tương ứng với số lượng thành phần.

Phương thức đẩy di chuyển các phần được truyền đến cuối mảng. Phương thức pop trả về thành phần ở cuối và loại bỏ nó.

Nói chung ở trình duyệt web IE sớm hơn phiên bản thứ tám, unshift có thể trả về giá trị không xác định trong các trình duyệt khác; Vì vậy tốt hơn hết là không nên dựa vào giá trị trả về từ unshift.

Thêm và bớt phần ở giữa mảng

Nếu tôi cần xóa một mảng JavaScript thì tôi nên làm gì? Phương thức mối nối được biết là có chữ ký Array.prototype.splice.

Nó loại bỏ các thành phần deleteCount khỏi mảng, bắt đầu bằng chỉ báo bắt đầu. Nếu có nhiều hơn hai đối số được truyền thì tất cả các đối số tiếp theo trong mảng sẽ được đặt thay vì các đối số bị loại bỏ. Nếu thời điểm bắt đầu là số âm thì chỉ số mà việc rút tiền sẽ tiếp tục diễn ra sẽ bằng độ dài + thời điểm bắt đầu. Mảng được trả về từ các phần tử đã bị loại bỏ.

Trong thực tế, bằng cách sử dụng phương thức splice, bạn có thể loại bỏ các thành phần ở giữa mảng hoặc thêm bất kỳ số lượng thành phần nào vào bất kỳ đâu trong mảng.

Trong phiên bản đơn giản nhất, nếu bạn cần loại bỏ một thành phần có chỉ mục i, bạn cần yêu cầu phương thức splice khỏi mảng có tham số i và 1.

Về nguyên tắc, tham số thứ hai của phương thức splice là tùy chọn, nhưng cách hoạt động của hàm với một đối số là khác nhau trên mỗi trình duyệt.

Ví dụ: trong Firefox, trong các biến thể mới nhất của Opera, Safari và Chrome, tất cả các chi tiết cho đến cuối mảng sẽ bị xóa.

Không có thành phần nào sẽ bị loại bỏ trong IE. Trong các biến thể đầu tiên của Opera, không thể dự đoán hành vi - một phần có chỉ số bắt đầu - 1 sẽ bị xóa. phương pháp này vượt qua ít nhất hai thành phần.

Phím

Tất nhiên, khi học JavaScript, mảng kết hợp, như đã đề cập trước đó, cũng cần được lưu ý. Đây là một loại thông tin trừu tượng (giao diện lưu trữ dữ liệu), cho phép bạn lưu các cặp có dạng “(khóa, giá trị)” và hỗ trợ các thao tác thêm một cặp cũng như xóa và tìm kiếm một cặp theo khóa:

TÌM (khóa).

CHÈN (giá trị, khóa).

XÓA (phím).

Người ta cho rằng hai cặp có khóa giống nhau không thể được lưu trữ trong một mảng kết hợp. Trong cặp k + v, v được gọi là giá trị gắn với khóa k. Ngữ nghĩa và tên của các thao tác trên có thể khác nhau khi triển khai các mảng đó khác nhau.

Do đó, hành động TÌM (khóa) trả về giá trị được liên kết với khóa đã cho hoặc một số đối tượng UNDEF cụ thể cho biết rằng không có giá trị nào được liên kết với khóa đã cho. Hai hành động còn lại không trả về gì (ngoại trừ thao tác có thành công hay không).

Nói chung, từ quan điểm của giao diện, thật thuận tiện khi coi mảng kết hợp là một mảng đơn giản, trong đó không chỉ các số nguyên mà còn cả các giá trị của các loại khác - ví dụ: chuỗi - có thể được sử dụng làm chỉ mục.

Nhân tiện, hỗ trợ cho các mảng như vậy có sẵn trong nhiều ngôn ngữ được giải thích. ngôn ngữ lập trình cấp độ cao, chẳng hạn như PHP, Perl, Ruby, Python, Tcl, JavaScript và các ngôn ngữ khác. Đối với các ngôn ngữ không có công cụ tích hợp sẵn để làm việc với mảng kết hợp, một số lượng lớn các triển khai dưới dạng thư viện đã được tạo.

Ví dụ mảng kết hợp có thể phục vụ danh bạ điện thoại. Trong phiên bản này, ý nghĩa là phức tạp “F. I. O. + địa chỉ”, và chìa khóa là số điện thoại. Một số điện thoại có một chủ nhưng một người có thể sở hữu nhiều số.

Tiện ích mở rộng liên kết

Cần lưu ý rằng các tiện ích mở rộng nổi tiếng nhất bao gồm:

  • MỖI - "đi qua" tất cả các cặp đã lưu.
  • CLEAR - xóa tất cả hồ sơ.
  • MIN - tìm cặp có giá trị khóa nhỏ nhất.
  • MAX - tìm cặp có giá trị khóa lớn nhất.

Hai tùy chọn cuối cùng yêu cầu các phím chỉ ra hành động so sánh.

Triển khai mảng kết hợp

Có nhiều cách triển khai khác nhau của mảng kết hợp. Việc triển khai phổ biến nhất có thể dựa trên một mảng đơn giản có các thành phần là cặp (giá trị, khóa). Để tăng tốc hành động tìm kiếm bạn có thể sắp xếp các thành phần của một mảng nhất định theo khóa và tìm nó bằng cách sử dụng. Nhưng điều này sẽ làm tăng khoảng thời gian cần thiết để thêm một cặp mới, vì sẽ cần phải “tách rời” các thành phần của mảng để đóng gói một mảng. bản ghi mới vào ô trống xuất hiện.

Việc triển khai được biết đến nhiều nhất là những triển khai dựa trên các cây tìm kiếm khác nhau. Ví dụ: trong trình đọc C++ STL điển hình, vùng chứa bản đồ được triển khai dựa trên cây gỗ gụ đen. Các kiểu Ruby, Tcl, Python sử dụng một loại bảng băm. Có những triển khai khác.

Nhìn chung, mỗi cách thực hiện đều có những nhược điểm và ưu điểm riêng. Điều quan trọng là cả ba hành động đều được thực hiện ở mức trung bình và ở sắc thái xấu nhất trong khoảng thời gian O(log n), trong đó n là số cặp hiện tại được lưu. Đối với cây tìm kiếm phù hợp (bao gồm cả cây đỏ đen), điều kiện này được đáp ứng.

Việc triển khai dựa trên bảng băm được biết là có thời gian trung bình là O(1), tốt hơn so với việc triển khai dựa trên cây tìm kiếm. Tất nhiên, điều này không đảm bảo thực hiện tốc độ cao của các hoạt động riêng lẻ: thời gian thực hiện trong trường hợp xấu nhất của INSERT được ký hiệu là O(n). Quá trình INSERT mất nhiều thời gian để hoàn thành khi hệ số lấp đầy đạt đến điểm cao nhất và chỉ mục bảng băm cần được xây dựng lại.

Nhân tiện, những danh sách băm này rất tệ vì chúng không thể được sử dụng để thực thi nhanh hành động bổ sung MAX, MIN và thuật toán duyệt tất cả các cặp đã lưu theo thứ tự khóa giảm dần hoặc tăng dần.