Các hàm Javascript để làm việc với mảng. ▍ Điểm mạnh của phương thức some(). Triển khai mảng kết hợp

  • Dịch

Hầu hết các ứng dụng được phát triển ngày nay đều yêu cầu tương tác với một số loại tập dữ liệu. Xử lý các phần tử trong bộ sưu tập là thao tác phổ biến mà có thể bạn đã từng gặp. Ví dụ: khi làm việc với mảng, bạn có thể không cần suy nghĩ, sử dụng vòng lặp for thông thường, trông giống như thế này: for (var i=0; i< value.length; i++){} . Однако, лучше, всё-таки, смотреть на вещи шире.

Giả sử chúng ta cần hiển thị một danh sách các sản phẩm và nếu cần, hãy chia nó thành các danh mục, lọc nó, thực hiện tìm kiếm trên đó, sửa đổi danh sách này hoặc các thành phần của nó. Có lẽ bạn cần thực hiện nhanh một số phép tính có liên quan đến các phần tử của danh sách. Giả sử bạn cần thêm cái gì đó với cái gì đó, nhân cái gì đó với cái gì đó. Có thể tìm thấy các công cụ trong JavaScript cho phép bạn giải quyết những vấn đề như vậy nhanh hơn và thuận tiện hơn so với việc sử dụng vòng lặp for thông thường không?

Trên thực tế, có những tiện ích như vậy trong JavaScript. Một số trong số chúng sẽ được thảo luận trong tài liệu, bản dịch mà chúng tôi trình bày để các bạn chú ý ngày hôm nay. Cụ thể, chúng ta đang nói về toán tử trải rộng, vòng lặp for...of và các phương thức include(), some(), each(), filter(), map() và less(). Ở đây chúng ta chủ yếu nói về mảng, nhưng các kỹ thuật được thảo luận ở đây nhìn chung phù hợp để làm việc với các loại đối tượng khác.

Cần lưu ý rằng đánh giá cách tiếp cận hiện đại Quá trình phát triển JS thường bao gồm các ví dụ được chuẩn bị bằng cách sử dụng các hàm mũi tên. Có lẽ bạn không sử dụng chúng thường xuyên - có thể vì bạn không thích chúng, có thể vì bạn không muốn dành quá nhiều thời gian để học điều gì đó mới, hoặc có thể chúng không phù hợp với bạn. Do đó, ở đây, trong hầu hết các tình huống, hai tùy chọn để thực hiện các hành động giống nhau sẽ được hiển thị: sử dụng các hàm thông thường (ES5) và sử dụng các hàm mũi tên (ES6). Đối với những người mới làm việc với hàm mũi tên, hàm mũi tên không tương đương với việc khai báo hàm và biểu thức hàm. Bạn không nên thay thế cái này bằng cái kia. Đặc biệt, điều này là do thực tế là trong các hàm thông thường và hàm mũi tên từ khóađiều này hành xử khác nhau.

1. Toán tử trải rộng Toán tử trải rộng cho phép bạn “mở rộng” mảng bằng cách thay thế các phần tử của chúng thay vì mảng ở nơi sử dụng toán tử này. Một cách tiếp cận tương tự đã được đề xuất cho các đối tượng bằng chữ.▍ Điểm mạnh toán tử mở rộng
  • Nó đơn giản và đường tắt“kéo” các phần tử riêng lẻ của nó ra khỏi một mảng.
  • Toán tử này phù hợp để làm việc với mảng và đối tượng bằng chữ.
  • Đây là một phương pháp làm việc nhanh chóng và trực quan với các đối số của hàm.
  • Toán tử mở rộng không chiếm nhiều không gian trong mã - nó trông giống như ba dấu chấm (...).
▍Ví dụ Giả sử bạn phải đối mặt với nhiệm vụ hiển thị danh sách các món ăn yêu thích của mình mà không sử dụng vòng lặp. Sử dụng toán tử mở rộng, việc này được thực hiện như thế này:

2. Vòng lặp for…of Toán tử for…of được thiết kế để duyệt qua các đối tượng có thể lặp lại. Nó cho phép truy cập vào các phần tử riêng lẻ của các đối tượng đó (đặc biệt là các phần tử mảng), ví dụ, cho phép chúng được sửa đổi. Nó có thể được coi là sự thay thế cho vòng lặp for thông thường.▍Sức mạnh của vòng lặp for…of
  • Đây là một cách dễ dàng để thêm hoặc cập nhật các mục trong bộ sưu tập.
  • Vòng lặp for…of cho phép bạn thực hiện nhiều phép tính khác nhau bằng cách sử dụng các phần tử (tổng, nhân, v.v.).
  • Nó thuận tiện để sử dụng khi bạn cần kiểm tra bất kỳ điều kiện nào.
  • Việc sử dụng nó giúp viết mã sạch hơn và dễ đọc hơn.
▍Ví dụ Giả sử bạn có cấu trúc dữ liệu mô tả nội dung của hộp công cụ và bạn muốn hiển thị các công cụ đó. Đây là cách thực hiện bằng vòng lặp for...of:

3. Phương thức bao gồm () Phương thức bao gồm () được sử dụng để kiểm tra sự hiện diện của một phần tử nhất định trong bộ sưu tập, cụ thể, ví dụ: dòng cụ thể trong một mảng chứa các chuỗi. Phương thức này trả về true hoặc false tùy thuộc vào kết quả kiểm tra. Khi sử dụng nó, cần lưu ý rằng nó có phân biệt chữ hoa chữ thường. Ví dụ: nếu bộ sưu tập chứa phần tử chuỗi SCHOOL và bao gồm() kiểm tra sự hiện diện của nó trên chuỗi school , thì phương thức sẽ trả về sai .▍Độ mạnh của phương thức bao gồm()
  • Phương thức include() rất hữu ích trong việc tạo cơ chế truy xuất dữ liệu đơn giản.
  • Nó cung cấp cho nhà phát triển một cách trực quan để xác định sự hiện diện của dữ liệu nhất định trong một mảng.
  • Thật thuận tiện khi sử dụng trong các biểu thức có điều kiện để sửa đổi, lọc các phần tử và thực hiện các thao tác khác.
  • Việc sử dụng nó dẫn đến khả năng đọc mã được cải thiện.
▍Ví dụ Giả sử bạn có một gara, được biểu thị bằng một mảng có danh sách các ô tô và bạn không biết liệu một chiếc ô tô nào đó có ở trong gara này hay không. Để giải quyết vấn đề này, bạn cần viết mã cho phép bạn kiểm tra xem ô tô có ở trong gara hay không. Hãy sử dụng phương thức include() :

4. Phương thức Some() Phương thức some() cho phép bạn kiểm tra xem một số phần tử bạn đang tìm kiếm có tồn tại trong mảng hay không. Dựa trên kết quả kiểm tra, nó trả về true hoặc false. Nó tương tự như phương thức include() ở trên, ngoại trừ đối số của nó là một hàm chứ không phải là một chuỗi thông thường chẳng hạn.
  • Phương thức some() cho phép chúng ta kiểm tra xem mảng có chứa ít nhất một trong các phần tử mà chúng ta quan tâm hay không.
  • Nó thực hiện kiểm tra điều kiện bằng cách sử dụng hàm được truyền cho nó.
  • Phương pháp này thuận tiện để sử dụng.
▍Ví dụ Giả sử bạn là chủ sở hữu của một câu lạc bộ và nói chung, bạn không quan tâm đến việc chính xác ai sẽ đến câu lạc bộ của bạn. Tuy nhiên, một số du khách không được phép vào câu lạc bộ vì họ có xu hướng tiêu thụ quá nhiều đồ uống có cồn, ít nhất là nếu họ đến cơ sở của bạn một mình và không có ai chăm sóc họ. TRONG trong trường hợp này một nhóm du khách chỉ có thể vào câu lạc bộ nếu ít nhất một trong số họ ít nhất 18 tuổi. Để tự động kiểm tra loại này, hãy sử dụng phương thức some(). Dưới đây ứng dụng của nó được thể hiện trong hai phiên bản.ES5

ES6

5. Phương thức Every() Phương thức each() duyệt qua mảng và kiểm tra từng phần tử xem có tuân thủ một điều kiện nhất định hay không, trả về true nếu tất cả các phần tử của mảng đáp ứng điều kiện và trả về false nếu ngược lại. Bạn có thể thấy rằng nó tương tự như phương thức some().▍ Điểm mạnh của phương thức Every()
  • Phương thức Every() cho phép bạn kiểm tra xem tất cả các phần tử của mảng có đáp ứng điều kiện hay không.
  • Điều kiện có thể được thiết lập bằng cách sử dụng hàm.
  • Nó thúc đẩy một cách tiếp cận khai báo để lập trình.
▍Ví dụ Hãy quay lại ví dụ trước. Ở đó, bạn cho phép những vị khách dưới 18 tuổi vào câu lạc bộ, nhưng ai đó đã viết đơn cho cảnh sát, sau đó bạn rơi vào một tình huống khó chịu. Sau khi mọi thứ đã được sắp xếp ổn thỏa, bạn quyết định rằng mình không cần tất cả những thứ này và thắt chặt các quy định khi đến thăm câu lạc bộ. Bây giờ một nhóm du khách chỉ có thể vào câu lạc bộ nếu mỗi thành viên trong nhóm ít nhất 18 tuổi. Như lần trước, chúng ta sẽ xem xét việc giải quyết vấn đề bằng hai phiên bản, nhưng lần này chúng ta sẽ sử dụng phương thức Every().ES5

ES6

6. Phương thức filter() Phương thức filter() cho phép bạn tạo, dựa trên một mảng nhất định, một mảng mới chỉ chứa các phần tử của mảng ban đầu thỏa mãn một điều kiện nhất định.
  • Phương thức filter() tránh sửa đổi mảng ban đầu.
  • Nó cho phép bạn loại bỏ các yếu tố không cần thiết.
  • Nó cải thiện khả năng đọc mã.
▍Ví dụ Giả sử bạn chỉ cần chọn từ danh sách các giá lớn hơn hoặc bằng 30. Hãy sử dụng phương thức filter() .ES5 để giải quyết vấn đề này

ES6

7. Phương thức Map() Phương thức map() tương tự như phương thức filter() ở chỗ nó cũng trả về một mảng mới. Tuy nhiên, nó được sử dụng để sửa đổi các phần tử của mảng ban đầu.▍Sức mạnh của phương thức map()
  • Phương thức map() tránh việc phải thay đổi các phần tử của mảng ban đầu.
  • Nó có thể được sử dụng để sửa đổi các phần tử mảng một cách thuận tiện.
  • Nó cải thiện khả năng đọc mã.
▍Ví dụ Giả sử bạn có một danh sách các sản phẩm kèm theo giá. Người quản lý của bạn cần danh sách mới hàng hóa có giá giảm 25%. Hãy sử dụng phương thức map() .ES5 để giải quyết vấn đề này

ES6

8. Phương thức less() Phương thức less(), ở dạng đơn giản nhất, cho phép bạn tính tổng các phần tử của mảng số. Nói cách khác, nó giảm mảng xuống một giá trị duy nhất. Điều này cho phép bạn sử dụng nó để thực hiện nhiều phép tính khác nhau.▍Điểm mạnh của phương thức less()
  • Sử dụng phương thức less(), bạn có thể tính tổng hoặc trung bình của các phần tử của một mảng.
  • Phương pháp này tăng tốc và đơn giản hóa việc tính toán.
▍Ví dụ Giả sử bạn cần tính toán chi phí trong tuần và được lưu trữ trong một mảng. Hãy giải quyết vấn đề này bằng phương thức less() .ES5

ES6

Thêm thẻ

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ễ sử dụng cho các lập trình viên. 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 khu vực để 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 kỹ hơn về nó. Tất cả các mảng, dù được xây dựng bằng cách sử dụ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 một 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 đúng như vậy, 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.

Khá dễ dàng để xóa 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 đã tìm hiểu được một chút, Mảng hai chiều là thứ chúng ta cần 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 để sản xuất 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 nhãn hiệu JavaScript sử dụng mảng kết hợp. Để 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ảng JavaScript, bạn cần đặt lại độ dài của nó:

  • 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

Nào chúng ta cùng tiếp tục nghiên cứu ngôn ngữ JavaScript thú vị này nhé. 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 chất lượng thay đổi độ dài, 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 xóa 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, trong Internet Explorer cũ hơn phiên bản thứ tám, việc unshift có thể trả về giá trị không xác định; trong các trình duyệt khác, một giá trị độ dài mới. 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. Do đó, bạn luôn cần chuyển ít nhất hai thành phần cho phương thức này.

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 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.

Một ví dụ về mảng kết hợp sẽ là 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ảng này bằng khóa và tìm 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 "di chuyển" các thành phần của mảng để đóng gói 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 INSERT trong trường hợp xấu nhất được ký hiệu là O(n). Quá trình INSERT chạy trong một thời gian dài 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.

Chúc một ngày tốt lành cho tất cả. Alexey Gulynin đang liên lạc. Trong bài viết trước chúng ta đã xem xét cấu trúc switch case trong javascript. Trong bài viết này tôi muốn cho bạn biết mảng trong Javascript là gì. Khái niệm mảng đóng vai trò quan trọng không chỉ trong Javascript mà còn trong tất cả các chương trình lập trình. Một biến, chẳng hạn như một mảng, không chứa một phần tử mà có nhiều phần tử. Cú pháp để tạo một mảng như sau:

Var mas = new Array(value1, value2,..., valueN);

Trong trường hợp này, một biến mảng mas được tạo với các giá trị được chỉ định trong ngoặc đơn. Xin lưu ý rằng mảng được tạo bằng từ khóa mới. Bạn có thể truy cập các phần tử của mảng bằng cách chỉ định tên mảng và chỉ mục mảng trong dấu ngoặc vuông. Chỉ số mảng được đặt từ 0. Ví dụ mảng gồm 4 phần tử và hiển thị phần tử thứ 2:

var mas = new Array("privet", 1, 10, 5); document.write("Phần tử mảng thứ hai = "+mas); // số 10 sẽ được hiển thị

Nếu chúng ta đặt mas , thì "privet" sẽ được in, vì việc lập chỉ mục của mảng bắt đầu từ 0. Bây giờ chúng ta hãy tìm hiểu cách hiển thị tất cả các phần tử của một mảng. Để làm điều này bạn cần sử dụng một vòng lặp. Ngoài việc biết các vòng lặp trong Javascript, bạn cần biết thuộc tính độ dài của mảng, thuộc tính này trả về số phần tử của mảng (hay nói cách khác là độ dài của mảng). Hãy in độ dài của mảng mas:

var mas = new Array("privet", 1, 10, 5); document.write("Độ dài mảng = "+mas.length); // số 4 sẽ được hiển thị

In tất cả các phần tử mảng:

var mas = new Array("privet", 1, 10, 5); là tôi; với (i = 0; tôi< mas.length; i++) document.write(mas[i]+" ");

Cho đến nay, chúng ta đã xem xét mảng một chiều. Nói chung, mảng có thể có nhiều chiều. Điều chính bạn cần hiểu là, ví dụ, mảng hai chiều là một mảng có các phần tử là mảng. Hãy xem vấn đề này: bạn cần tạo một mảng hai chiều 3 x 3, các phần tử của mảng này do người dùng chỉ định và hiển thị mảng này. Ở đây chúng ta sẽ sử dụng toán tử nhắc để yêu cầu một số từ người dùng:

var mas = new Array(); //khai báo mảng const n = 3; // khai báo một hằng số, tức là Mảng của chúng ta có kích thước 3 x 3 // để xác định mảng hai chiều, bạn phải sử dụng vòng lặp kép var i; var j; với (i = 0; tôi< n; i++) { mas[i] = new Array();//Здесь мы как раз каждый элемент массива делаем массивом for (j = 0; j < n; j++) { mas[i][j] = prompt("[" + i +","+j+"]= " ,"..."); //запрашиваем число у пользователя } } for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { document.write("[" + i +","+j+"]= "+ mas[i][j]);} //выводим элемент массива document.write("
"); //đi đến dòng mới sau mỗi hàng được điền của mảng)

Trong trường hợp của chúng tôi, một mảng hai chiều tương ứng (ví dụ) với cấu trúc sau: mas=[,,] . Bạn có thể thấy mảng có 3 phần tử, mỗi phần tử là một mảng.

Ban đầu, nhiệm vụ của Javascript là tạo ra các trang web động. Trong thực tế, tôi chưa bao giờ sử dụng mảng hai chiều mà chỉ sử dụng mảng một chiều nên kiến ​​thức về mảng mà bạn nhận được từ bài viết này sẽ khá đầy đủ. Trong một trong những bài viết sau tôi sẽ nói về Đối tượng mảng, các thuộc tính và phương thức của nó.

Bạn có thể làm việc với mảng bằng cách sử dụng Các phương pháp khác nhau, được cung cấp bởi hàm tạo mảng.

Phương pháp bật/đẩy và dịch chuyển/không dịch chuyển

Hãy xem xét các phương thức pop() và push(). Những phương thức này cho phép bạn làm việc với mảng như thể chúng là các ngăn xếp. Ngăn xếp là một cấu trúc dữ liệu trong đó việc truy cập vào các phần tử được tổ chức theo nguyên tắc LIFO (tiếng Anh: Last in - First out, “last in - first out”). Nguyên lý hoạt động của ngăn xếp có thể được so sánh với một chồng đĩa: để lấy chiếc thứ hai từ trên xuống, bạn cần loại bỏ chiếc trên cùng. Cách thức hoạt động được thể hiện trong hình:

Và vì vậy hãy quay lại xem xét các phương thức push() và pop(). 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() - 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ỏ. Cần lưu ý rằng cả hai phương pháp này đều sửa đổi mảng tại chỗ, thay vì tạo bản sao đã sửa đổi của mảng đó.

Var foo = ; // foo: foo.push(1,2); // foo: Trả về 2 foo.pop(); // foo: Trả về 2 foo.push(3); // foo: Trả về 2 foo.pop(); // foo: Trả về 3 foo.push(); // foo: ] Trả về 2 foo.pop() // foo: Trả về foo.pop(); // foo: Trả về 1 var Fruits = ["lê", "chuối", "táo"]; var đã chọn = Fruits.pop(); document.write("Bạn đã chọn " + đã chọn của tôi); Thử "

Các phương thức shift() và unshift() hoạt động giống như pop() và push(), ngoại trừ việc chúng chèn và xóa các phần tử ở đầu 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 để nhường chỗ cho các phần tử mới, thêm một hoặc nhiều 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ỏ phần tử đầu tiên của mảng và trả về giá trị của nó, dịch chuyển tất cả các phần tử tiếp theo sang vị trí chiếm giữ. không gian trôngở đầu mảng.

Var f = ; // f: f.unshift(1); // f: Trả về: 1 f.unshift(22); // f: Trả về: 2 f.shift(); // f: Trả về: 22 f.unshift(3,); // f:,1] Trả về: 3 f.shift(); // f:[,1] Trả về: 3 f.shift(); // f: Trả về: f.shift(); // f: Trả về: 1

phương pháp tham gia

Phương thức Array.join() được sử dụng để nối các phần tử của mảng thành một chuỗi. Phương thức này có thể được truyền vào một đối số chuỗi tùy chọn, đối số này sẽ được sử dụng để phân tách các phần tử trong chuỗi. Nếu dấu phân cách không được chỉ định, ký tự phân cách mặc định khi gọi phương thức sẽ là dấu phẩy.

Var a = ["Gió","Mưa","Lửa"]; var myVar1 = a.join(); //"Gió,Mưa,Lửa" var myVar2 = a.join(", "); //"Gió, Mưa, Lửa" var myVar3 = a.join(" + "); //"Gió + Mưa + Lửa" document.write(myVar1 + "
" + myVar2 + "
" + myVar3); Hãy thử "

Phương thức Array.join() là nghịch đảo của phương thức String.split(), phương thức này tạo ra một mảng bằng cách chia một chuỗi thành các đoạn.

phương pháp đả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ó các phần tử được sắp xếp lại. Phương thức này không tạo ra 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 hiện có.

Var myArr = ["một", "hai", "ba"]; document.write(myArr.reverse()); Thử "

phương pháp nối

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, được tăng tuần tự các giá trị của tất cả các đối số được truyền cho concat(). Nếu bất kỳ đối số nào trong số này là một mảng thì tất cả các phần tử của nó sẽ được thêm vào. Tên của mảng được sử dụng làm đối số và được chỉ định theo thứ tự các phần tử của chúng được kết hợp.

Var a = ; a.concat(4, 5) //Trả về a.concat(); //điều tương tự - trả về a.concat(,) //Trả về

phương pháp sắp xếp

Phương thức Array.sort() sắp xếp các phần tử mảng tại chỗ 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ố, nó sẽ sắp xếp các phần tử mảng thành thứ tự ABC(tạm thời chuyển đổi chúng thành chuỗi để thực hiện so sánh). Phương thức Sort() có thể lấy hàm so sánh làm đối số, xác định thứ tự sắp xếp của các phần tử.

Var a = ["Kiwi", "Quả cam", "Lê"]; một loại(); var s = a.join(", "); //Cam, Lê, Kiwi document.write(s); //ví dụ với số var myArr = ; myArr.sort(); document.write(myArr); //1,10,2 Thử »

Bạn có thể mong đợi sẽ thấy kết quả hơi khác so với việc sắp xếp số. Việc sắp xếp này xảy ra do phương thức Sort() sắp xếp các phần tử bằng cách chuyển đổi chúng thành chuỗi. Do đó, thứ tự của chúng hóa ra là chuỗi - rốt cuộc là “10”

Để 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(). Tuy nhiên, cần lưu ý rằng bạn sẽ phải tự viết hàm so sánh. Hàm này phải có hai tham số vì nó đặt đối số nào trong hai đối số của nó sẽ xuất hiện đầu tiên trong danh sách được sắp xếp. Để dễ hiểu và viết hàm như vậy dễ dàng hơn, có một số quy tắc theo đó thứ tự của các phần tử sẽ được xác định:

  • Nếu đối số thứ nhất phải đứng trước đối số thứ hai thì hàm so sánh trả về một số âm(nếu một
  • Nếu đối số thứ nhất phải theo sau đối số thứ hai thì hàm so sánh trả về một số dương (nếu a > b)
  • Nếu hai giá trị tương đương nhau (tức là thứ tự của chúng không quan trọng), hàm so sánh trả về 0 (nếu a == b)

Để so sánh, hàm sử dụng các phần tử mảng làm đối số của nó:

Function foo(a,b) ( //định nghĩa hàm kiểm tra if (a b) return 1; return 0; //if a == b ) var a = ; a.sort(foo); // chỉ có tên hàm được truyền dưới dạng đối số document.write(a.join(", ")); //viết điều tương tự ngắn gọn hơn var a = ; a.sort(function(a,b) ( //sử dụng hàm ẩn danh return a - b; //hàm trả về giá trị 0 )); document.write(a); //1,2,5,10 Thử »

Mục đầu tiên trong ví dụ được viết theo cách này để giúp bạn dễ hiểu cách thức hoạt động của nó hơn. Hãy lưu ý mức độ thuận tiện của việc sử dụng hàm ẩn danh trong đoạn thứ hai. Nó chỉ được gọi một lần nên không cần thiết phải đặt tên cho nó.

Lưu ý: Nếu có phần tử không xác định trong mảng, chúng sẽ được chuyển xuống cuối mảng.

phương pháp cắt lát

Phương thức Array.slice() được sử dụng để sao chép một phần được chỉ định từ một mảng và trả về một mảng mới chứa các phần tử được sao chép. Mảng ban đầu không thay đổi.

Cú pháp phương thức:

ArrayName.slice(bắt đầu, kết thúc);

Tên mảng nên được thay thế bằng tên của mảng mà bạn muốn trích xuất bộ cụ thể các phần tử cho mảng mới. Phương thức này lấy hai đối số xác định phần đầu và phần cuối của mảng được trả về. Phương thức này sao chép một phần của mảng, bắt đầu từ đầu đến cuối, không bao gồm phần cuối. Nếu chỉ đưa ra một đối số, mảng trả về sẽ chứa tất cả các phần tử từ vị trí đã chỉ định đến cuối mảng. Bạn có thể sử dụng các chỉ số âm - chúng được tính từ cuối mảng.

Var mảng = ; mảng.slice(0,3); //Trả về arr.slice(3); //Trả về arr.slice(1,-1); //Trả về arr.slice(-3,-2); //Trả về

phương pháp ghép

Phương thức Array.splice() là phương pháp phổ quátđể làm việc với mảng. Nó sửa đổi mảng tại chỗ thay vì trả về một mảng được sửa đổi mới giống như các phương thức slice() và concat() vẫn làm. Phương thức ghép nối 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, thay thế các phần tử - từng phần tử một và đồng thời. Nó trả về một mảng bao gồm các phần tử đã bị loại bỏ, nếu không có phần tử nào bị xóa thì nó sẽ trả về một mảng trống.

Cú pháp phương thức:

Array_name.splice(chỉ số, số lượng, elem1, ..., elemN);

Đối số đầu tiên chỉ định chỉ mục trong mảng để bắt đầu chèn hoặc xóa phần tử. Đối số thứ hai chỉ định số phần tử cần xóa khỏi mảng bắt đầu từ chỉ mục được chỉ định trong đối số thứ nhất; nếu đối số thứ hai là 0 thì sẽ không có phần tử nào bị xóa. Nếu đối số thứ hai bị bỏ qua, tất cả các phần tử mảng bắt đầu từ chỉ số được chỉ địnhđến cuối mảng. Khi sử dụng số vị trí âm, các phần tử sẽ được tính từ cuối mảng.

Var trái cây = ["cam", "táo", "lê", "nho"]; var đã xóa = Fruit.splice(2,2); // trả về ["lê", "nho"] document.write(đã xóa); var mảng = ; mảng.splice(4); // Trả về ; mảng trở thành: arr.splice(1,2); // Trả về ; mảng trở thành: arr.splice(1,1); // Trả về ; mảng trở thành: Thử »

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ỏ. Hai đối số này có thể được theo sau bởi bất kỳ số lượng đối số bổ sung nào chỉ định các phần tử được chèn vào mảng, bắt đầu từ vị trí được chỉ định bởi đối số đầu tiên.

Var trái cây = ["cam", "táo"]; trái cây.splice(2,0, "dưa hấu"); // trả về document.write(fruit); //trở thành ["cam", "táo", "dưa hấu"] var arr = ; arr.splice(2,0,"a","b"); // Trả về ; đã trở thành arr.splice(2,2,); // Trả về ["a","b"]; đã trở thành ,3,4,5] Thử »

Điều đáng chú ý là, không giống như concat(), phương thức splice() không chia các mảng được truyền dưới dạng đối số thành các phần tử riêng lẻ. Nghĩa là, nếu phương thức được truyền một mảng để chèn, thì nó sẽ chèn chính mảng đó chứ không phải các phần tử của mảng đó.

phương thức toString

Phương thức toString() chuyển đổi các phần tử của mảng thành chuỗi bằng cách sử dụng dấu phẩy làm ký tự phân cách.

Var arr = ["Sữa","Bánh mì","Bánh quy"]; var food = arr.toString(); document.write(thực phẩm); //Sữa,Bánh mì,Bánh quy Hãy thử »

Lưu ý rằng phương thức trả về chuỗi giống như join() khi được gọi mà không có đối số.

IndexOf và LastIndexOf

Phương thức indexOf trả về chỉ mục của một phần tử có giá trị bằng giá trị được truyền dưới dạng đối số cho phương thức.

Cú pháp của phương thức indexOf() và LastIndexOf():

Array_name.indexOf(search_element, chỉ mục) mảng_name.lastIndexOf(search_element, chỉ mục)

Đối số đầu tiên của phương thức chỉ định giá trị của phần tử có chỉ mục cần tìm, đối số thứ hai (tùy chọn) chỉ định chỉ mục mà việc tìm kiếm sẽ bắt đầu từ đó. Nếu có nhiều lần xuất hiện giống nhau thì chỉ số nhỏ nhất (đầu tiên) sẽ được chọn. Nếu không tìm thấy phần tử có giá trị mong muốn, phương thức sẽ trả về -1. Bên trong phương thức, so sánh nghiêm ngặt (===) được sử dụng để tìm kiếm.

Var a = ; a.indexOf(3); //return 2 a.indexOf(3,4); //return 6 a.indexOf(35); //return -1: không có phần tử nào có giá trị này a.indexOf(2); // 1

Phương thức LastIndexOf() cũng trả về chỉ mục của phần tử, giá trị của phần tử này bằng giá trị được truyền cho phương thức làm đối số. Sự khác biệt duy nhất là phương thức LastIndexOf() chọn chỉ mục (cuối cùng) lớn nhất.

Var a = ; a.lastIndexOf(3); //return 7 a.lastIndexOf(35); //return -1: không có phần tử nào có giá trị này a.lastIndexOf(2); // 6

Phương thức lặp

Các phương thức được mô tả dưới đây là các phương thức lặp. Trong tất cả các trình duyệt hiện đạiĐể làm việc với mảng, có các phương thức được thiết kế để lặp lại các phần tử và thực hiện các hành động khác nhau trên chúng. Các phương thức này là forEach(), map(), filter(), mọi(), some, less() và lessRight().

Chúng lặp lại các phần tử của mảng bắt đầu từ 0 đến độ dài - 1 và nếu phần tử tồn tại, hãy chuyển nó đến hàm xử lý gọi lại.

cho mỗi

Cú pháp phương thức:

ArrayName.forEach(gọi lại, thisArg)

Đối số đầu tiên chỉ định hàm gọi lại mà phương thức forEach() sẽ gọi cho từng phần tử của mảng. Bạn cần phải tự viết phần triển khai của hàm xử lý được gọi. Hàm được gọi phải có ba tham số: tham số đầu tiên lấy giá trị của phần tử mảng làm đối số, tham số thứ hai - chỉ mục của phần tử và tham số thứ ba - chính mảng đó. Tuy nhiên, nếu bạn chỉ cần sử dụng giá trị của các phần tử mảng, bạn có thể viết hàm chỉ với một tham số. Đối số thứ hai - thisArg (tùy chọn) sẽ được chuyển thành giá trị của this.

Var mảng = ; hàm foo(value) ( ​​​var sum = value * this; return document.write(sum + "
"); ) arr.forEach(foo, 5); // đối số thứ hai sẽ được truyền dưới dạng giá trị của // ví dụ có ba tham số var a = ; a.forEach(function(el, idx, a) ( document .write( "a["+idx+"] = "+el+" trong ["+a+"]
"); )); Thử "

lọc

Cú pháp phương thức:

Array_name.filter(gọi lại, thisObject)

Phương thức filter() tạo và trả về một mảng mới sẽ chỉ chứa các phần tử mảng mà lệnh gọi tương ứng. chức năng gọi lại sẽ trở lại đúng sự thật.

Hàm isBig(element, index, array) ( //trả về các số lớn hơn hoặc bằng 10 return (element >= 10); //nếu giá trị của phần tử lớn hơn hoặc bằng 10 thì biểu thức sẽ trả về true ) var filter = .filter(isBig) ; // đã lọc

bản đồ

Phương thức map() tạo và trả về một mảng mới, mảng này sẽ bao gồm các kết quả của việc gọi hàm callback(item, idx, ar) cho từng phần tử của mảng.

Var a = ; var b = a.map(function(item, idx, arr) ( return item * item; )); // b =

mỗi và một số

Phương thức Every() trả về true nếu, đối với tất cả các phần tử của mảng, hàm được chỉ định dùng để kiểm tra chúng trả về true.

Phương thức some() trả về true nếu một hoặc nhiều phần tử trong hàm đã chỉ định trả về true trong quá trình thử nghiệm.

Var a = ; a.every(function(x) ( return x 10; )) //true: một số > 10

giảm và giảmRight

Cú pháp phương thức:

array_name.reduce(gọi lại, giá trị ban đầu) mảng_name.reduceRight(gọi lại, giá trị ban đầu)

Phương thức less() được áp dụng chức năng được chỉ định(gọi lại) liên quan đến hai giá trị trong mảng cùng một lúc, lặp qua các phần tử từ trái sang phải, đồng thời duy trì kết quả trung gian.

đối số hàm gọi lại: (previousValue, currentItem, chỉ mục, mảng)

  • trướcValue - kết quả trả về của hàm gọi lại (còn được gọi là kết quả trung gian)
  • currentItem - phần tử hiện tại của mảng (các phần tử được sắp xếp theo thứ tự từ trái sang phải)
  • chỉ mục - chỉ mục của phần tử hiện tại
  • mảng - mảng được xử lý

initValue là đối tượng được sử dụng làm đối số đầu tiên của lệnh gọi đầu tiên đến hàm gọi lại. Nói một cách đơn giản, giá trị của previousValue khi được gọi lần đầu sẽ bằng giá trị ban đầu. Nếu không có giá trị ban đầu thì nó bằng phần tử đầu tiên của mảng và việc tìm kiếm bắt đầu từ phần tử thứ hai:

Var a = ; hàm foo(prevNum,curNum) ( sum = prevNum + curNum; Alert(sum); return sum; ) var result = a.reduce(foo, 0); document.write(kết quả); Thử "

Hãy xem ví dụ này hoạt động như thế nào. Các đối số đầu tiên của hàm foo là:

  • prevNum = 0 (vì giá trị ban đầu là 0)
  • curNum = 1 (phần tử hiện tại là phần tử đầu tiên của mảng)

1 được thêm vào số 0. Kết quả này (tổng: 1) sẽ được chuyển thành prevNum vào lần chạy hàm tiếp theo. Và cứ như vậy cho đến khi đạt đến phần tử cuối cùng. Kết quả trả về, tổng của lần chạy cuối cùng, sẽ là 15 (1+2+3+4+5).

Phương thức lessRight hoạt động tương tự như phương thức rút gọn, nhưng nó đi qua mảng từ phải sang trái:

Var a = ["h","o","m","e"]; function bar(prevStr, curItem) ( return prevStr + curItem; ) document.write(a.reduceRight(bar)); // emoh

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ác loại 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 tùy 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 “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 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); // hiển thị "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ử.

Ví dụ sau sử dụng phương thức splice() để thêm hai phần tử, bắt đầu từ chỉ mục 2 (nghĩa là 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ỉ mục 2 (có giá trị "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.