--- title: Array slug: Web/JavaScript/Reference/Global_Objects/Array tags: - Array - JavaScript translation_of: Web/JavaScript/Reference/Global_Objects/Array ---
Đối tượng Array
trong JavaScript là đối tượng toàn cục được dùng để xây dựng nên các mảng; là những đối tượng cấp cao và giống một dạng danh sách.
Tạo một Mảng
var fruits = ['Apple', 'Banana']; console.log(fruits.length); // 2
Truy cập (bằng chỉ mục) đến một phần tử của Mảng
var first = fruits[0]; // Apple var last = fruits[fruits.length - 1]; // Banana
Lặp qua một Mảng
fruits.forEach(function(item, index, array) { console.log(item, index); }); // Apple 0 // Banana 1
Thêm phần tử vào cuối Mảng
var newLength = fruits.push('Orange'); // ["Apple", "Banana", "Orange"]
Xóa phần tử từ cuối Mảng
var last = fruits.pop(); // xoá bỏ Orange (từ vị trí cuối) // ["Apple", "Banana"];
Xóa phần tử từ đầu Mảng
var first = fruits.shift(); // xoá bỏ Apple từ vị trí đầu // ["Banana"];
Thêm phần tử vào đầu Mảng
var newLength = fruits.unshift('Strawberry') // thêm vào vị trí đầu // ["Strawberry", "Banana"];
Tìm chỉ mục của một phần tử trong Mảng
fruits.push('Mango'); // ["Strawberry", "Banana", "Mango"] var pos = fruits.indexOf('Banana'); // 1
Xóa một phần tử bằng chỉ mục của nó
var removedItem = fruits.splice(pos, 1); // đây là cách để xoá bỏ một phần tử // ["Strawberry", "Mango"]
Xóa các phần tử bắt đầu từ vị trí của chỉ mục
var vegetables = ['Cabbage', 'Turnip', 'Radish', 'Carrot']; console.log(vegetables); // ["Cabbage", "Turnip", "Radish", "Carrot"] var pos = 1, n = 2; var removedItems = vegetables.splice(pos, n); // đây là cách để xoá các phần tử, n định nghĩa số phần tử cần xoá bỏ, // từ vị trí đó (pos) trở đi đến cuối mảng. console.log(vegetables); // ["Cabbage", "Carrot"] (mảng ban đầu đã bị thay đổi) console.log(removedItems); // ["Turnip", "Radish"]
Sao chép một Mảng
var shallowCopy = fruits.slice(); // đây là cách để tạo một bản sao // ["Strawberry"]
[ element0 , element1 , ..., elementN ]
new Array(element0 , element1 [, ... [, elementN ]])
new Array(arrayLength)
nguyên tố N
mảng
xây dựng và lập luận đó là một con số. (Xem bên dưới). Lưu ý rằng trường hợp đặc biệt này chỉ áp dụng cho các mảng JavaScript tạo ra với các mảng
xây dựng, không mảng literals tạo ra với cú pháp khung.arrayLength
mảng
constructor là một số nguyên giữa 0 và 2 32 -1 (bao gồm), điều này trả về một mảng JavaScript mới với chiều dài thiết lập để con số đó. Nếu đối số là số nào khác, một {{jsxref ("Global_Objects / RangeError", "RangeError")}} ngoại lệ được ném ra.Mảng là đối tượng danh sách giống như nguyên mẫu mà có phương pháp để thực hiện traversal và đột biến hoạt động. Cả chiều dài của một mảng JavaScript hay các loại của các yếu tố của nó được cố định. Vì chiều dài kích thước của một mảng lớn hoặc thu nhỏ bất cứ lúc nào, các mảng JavaScript là không đảm bảo được dày đặc. Nói chung, đây là những đặc điểm thuận tiện; nhưng nếu các tính năng này không được mong muốn sử dụng cụ thể của bạn, bạn có thể xem xét sử dụng các mảng gõ.
Một số người nghĩ rằng bạn không nên sử dụng một mảng như là một mảng kết hợp . Trong mọi trường hợp, bạn có thể sử dụng đồng bằng {{jsxref ("Global_Objects / Object", "đối tượng")}} thay vào đó, mặc dù làm như vậy đi kèm với hãy cẩn thận của mình. Xem các bài viết từ điển JavaScript nhẹ với các phím tùy ý như là một ví dụ.
Mảng JavaScript được zero-lập chỉ mục: phần tử đầu tiên của mảng là lúc chỉ số 0
, và các yếu tố cuối cùng là chỉ số tương đương với giá trị của của mảng {{jsxref ("Array.length", "chiều dài")}} tài sản trừ đi 1.
var arr = ['đây là yếu tố đầu tiên "," đây là yếu tố thứ hai']; console.log(arr[0]); // Nhật ký này là yếu tố đầu tiên ' console.log(arr[1]); // Nhật ký này là yếu tố thứ hai ' console.log(arr[arr.length - 1]); // Nhật ký này là yếu tố thứ hai '
Các phần tử mảng là thuộc tính đối tượng trong cùng một cách mà toString
là một thuộc tính, nhưng cố gắng để truy cập vào một phần tử của mảng như sau ném một lỗi cú pháp, bởi vì tên sở hữu là không hợp lệ:
console.log(arr.0); // Một lỗi cú pháp
Có gì đặc biệt về mảng JavaScript và các thuộc tính gây ra điều này là. Tính JavaScript bắt đầu bằng một chữ số không thể được tham chiếu với ký hiệu dấu chấm; và phải được truy cập bằng cách sử dụng ký hiệu khung. Ví dụ, nếu bạn đã có một đối tượng với một thuộc tính có tên '3D'
, nó chỉ có thể được tham chiếu bằng cách sử dụng ký hiệu khung. Ví dụ như:
var years = [1950, 1960, 1970, 1980, 1990, 2000, 2010]; console.log(years.0); // Một lỗi cú pháp console.log(years[0]); // Đúng cú pháp
renderer.3d.setTexture (model, 'character.png'); // Một lỗi cú pháp renderer['3D']setTexture (model, 'character.png.'); // Đúng cú pháp
Lưu ý rằng trong ví dụ 3d
, '3D'
đã được trích dẫn. Có thể trích dẫn các chỉ số mảng JavaScript cũng như (ví dụ, năm ['2']
thay vì năm [2]
), mặc dù nó không cần thiết. 2 trong năm [2]
là bị cưỡng chế vào một chuỗi các công cụ JavaScript thông qua một tiềm ẩn toString
chuyển đổi. Chính vì lý do này mà '2'
và '02'
sẽ chỉ đến hai khe cắm khác nhau trên năm
đối tượng và các ví dụ sau đây có thể là sự thật
:
console.log(years['2'] = years['02']!);
Tương tự, thuộc tính đối tượng đó xảy ra để được dành riêng chỉ có thể được truy cập như các chuỗi trong ký hiệu khung:
var promise = { 'Var': 'text', 'Array': [1, 2, 3, 4] }; console.log(promise['Array']);
chiều dài
và số thuộc tínhMột mảng của JavaScript {{jsxref ("Array.length", "chiều dài")}} tài sản và tính toán được kết nối. Một số phương pháp mảng xây dựng trong (ví dụ, {{jsxref ("Array.join", "tham gia")}}, {{jsxref ("Array.slice", "lát cắt")}}, {{jsxref (" Array.indexOf "," indexOf ")}}, vv) có tính đến các giá trị của một mảng {{jsxref (" Array.length "," chiều dài ")}} tài sản khi chúng được gọi. Các phương pháp khác (ví dụ, {{jsxref ("Array.push", "đẩy")}}, {{jsxref ("Array.splice", "mối nối")}}, vv) cũng cho kết quả trong bản cập nhật tới một mảng của { {jsxref ("Array.length", "chiều dài")}} thuộc tính.
var fruits = [];
fruits.push('banana', 'apple', 'peach');
console.log(fruits.length); // 3
Khi thiết lập một thuộc tính trên một mảng JavaScript khi tài sản là một chỉ số mảng hợp lệ và chỉ số đó là ngoài giới hạn hiện tại của mảng, engine sẽ cập nhật thuộc tính {{jsxref ("Array.length", "chiều dài")}} của mảng cho phù hợp:
fruits[5] = 'mango';
console.log(fruits[5]); // 'mango'
console.log(Object.keys(fruits)); // ['0', '1', '2', '5']
console.log(fruits.length); // 6
Tăng {{jsxref ("Array.length", "chiều dài")}}.
fruits.length = 10; console.log(Object.keys(fruits)); // ['0', '1', '2', '5'] console.log(fruits.length); // 10
Giảm thuộc tính {{jsxref ("Array.length", "chiều dài")}} , tuy nhiên, xóa các phần tử.
fruits.length = 2; console.log(Object.keys(fruits)); // ['0', '1'] console.log(fruits.length); // 2
Điều này được giải thích thêm về {{jsxref ("Array.length")}} trang.
Kết quả của một trận đấu giữa một biểu hiện thường xuyên và một chuỗi có thể tạo ra một mảng JavaScript. Mảng này có các tính chất và các yếu tố trong đó cung cấp thông tin về trận đấu. Một mảng đó được trả về bởi {{jsxref ("RegExp.exec")}}, {{jsxref ("String.match")}} và {{jsxref ("string.Replace")}}. Để giúp giải thích các thuộc tính và các yếu tố, nhìn vào ví dụ sau đây và sau đó tham khảo bảng dưới đây:
// Trận đấu một d theo sau bởi một hoặc nhiều b theo sau bởi một d // Ghi phù hợp của b và d sau // Bỏ qua trường hợp var Myre = / d (b +) (d) / i; var myArray = myRe.exec('cdbBdbsbz');
Các tính chất và các yếu tố trở về từ trận đấu này như sau:
Bất động sản / tử | Miêu tả | Thí dụ |
đầu vào |
Một thuộc tính chỉ đọc phản ánh các chuỗi ban đầu dựa vào đó các biểu thức chính quy được kết hợp. | cdbBdbsbz |
mục lục |
Một thuộc tính chỉ đọc mà là chỉ số không dựa trên các trận đấu trong chuỗi. | 1 |
[0] |
Một yếu tố chỉ đọc mà xác định các ký tự tương ứng cuối cùng. | dbBd |
[1], ... [n] |
Chỉ đọc các yếu tố đó chỉ định các trận đấu substring parenthesized, nếu có trong các biểu hiện thường xuyên. Số lượng các chuỗi con trong ngoặc có thể là không giới hạn. | [1]: bB [2]: d |
Array
trong constructor (hàm dựng) có giá trị là 1.Mảng
mới từ một đối tượng giống mảng hoặc iterable.Array
mới với một số lượng các đối số, bất kể số hoặc loại của các đối số.Array
instancesTất cả instance Array
kế thừa từ {{jsxref ("Array.prototype")}}. Các đối tượng nguyên mẫu của Array
constructor có thể được sửa đổi để ảnh hưởng đến tất cả các instance Array
.
Array
phương thức chungĐôi khi bạn muốn áp dụng phương thức mảng các chuỗi hoặc các đối tượng mảng giống khác (chẳng hạn như chức năng {{jsxref ("Chức năng / lập luận", "lý luận", "", 1)}}). Bằng cách này, bạn đối xử với một chuỗi như là một mảng kí tự (hoặc nếu không điều trị một phi mảng như là một mảng). Ví dụ, để kiểm tra xem tất cả các nhân vật trong biến str là một lá thư, bạn có thể viết:
function isLetter (person) { return person >= 'a' && person <= 'z'; } if (Array.prototype.every.call (str, isLetter)) { console.log("The string
" + str + "contains only letters
!"); }
Ký hiệu này là khá lãng phí và JavaScript 1.6 giới thiệu một cách viết tắt chung:
if (Array.every (str, isLetter)) { console.log("The string
" + str + "contains only letters
!"); }
{{Jsxref ("Global_Objects / String", "Generics", "#String_generic_methods", 1)}} cũng có sẵn trên {{jsxref ("Global_Objects / String", "String")}}.
Đây không phải là một phần của tiêu chuẩn ECMAScript và chúng không được hỗ trợ bởi các trình duyệt không phải là Gecko. Như một thay thế tiêu chuẩn, bạn có thể chuyển đổi đối tượng của bạn thành một mảng bằng cách sử dụng ({{jsxref ("Array.from ()")}}, mặc dù phương pháp này có thể không được hỗ trợ trong các trình duyệt cũ:
if (Array.from(str).every(isLetter)) {
console.log("The string " + str + " contains only letters!");
}
Ví dụ sau tạo một mảng, msgArray
, với chiều dài 0, sau đó gán giá trị cho [0] msgArray
và msgArray [99]
, thay đổi độ dài của mảng đến 100.
var msgArray = []; msgArray [0] = "Hello"; msgArray [99] = 'World'; if (msgArray.length === 100) { console.log('Chiều dài là 100'); }
Sau đây tạo ra một bàn cờ như là một mảng hai chiều của chuỗi. Động thái đầu tiên được thực hiện bằng cách sao chép 'p' trong (6,4) đến (4,4). Các vị trí cũ (6,4) được làm trống.
var board = [
['R','N','B','Q','K','B','N','R'],
['P','P','P','P','P','P','P','P'],
[' ',' ',' ',' ',' ',' ',' ',' '],
[' ',' ',' ',' ',' ',' ',' ',' '],
[' ',' ',' ',' ',' ',' ',' ',' '],
[' ',' ',' ',' ',' ',' ',' ',' '],
['p','p','p','p','p','p','p','p'],
['r','n','b','q','k','b','n','r'] ];
console.log(board.join('\n') + '\n\n');
// Di chuyển King's Pawn về phía trước 2
board[4][4] = board[6][4];
board[6][4] = ' ';
console.log(board.join('\n'));
Đây là kết quả:
R, N, B, Q, K, B, N, R P, P, P, P, P, P, P, P ,,,,,,, ,,,,,,, ,,,,,,, ,,,,,,, p, p, p, p, p, p, p, p r, n, b, q, k, b, n, r R, N, B, Q, K, B, N, R P, P, P, P, P, P, P, P ,,,,,,, ,,,,,,, ,,,, P,,, ,,,,,,, p, p, p, p,, p, p, p r, n, b, q, k, b, n, r
values = [];
for (var x = 0; x < 10; x++){
values.push([
2 ** x,
2 * x ** 2
])
};
console.table(values)
Kết quả là:
0 1 0
1 2 2
2 4 8
3 8 18
4 16 32
5 32 50
6 64 72
7 128 98
8 256 128
9 512 162
(Cột đầu tiên là index (chỉ mục))
Đặc điểm kỹ thuật | Trạng thái | Chú thích |
---|---|---|
{{SpecName('ES1')}} | {{Spec2('ES1')}} | Định nghĩa ban đầu. |
{{SpecName("ES5.1", "#sec-15.4", "Array")}} | {{Spec2("ES5.1")}} | Phương thức mới được thêm vào: {{jsxref("Array.isArray")}}, {{jsxref("Array.prototype.indexOf", "indexOf")}}, {{jsxref("Array.prototype.lastIndexOf", "lastIndexOf ")}}, {{jsxref("Array.prototype.every", "every")}}, {{jsxref("Array.prototype.some", "some")}}, {{jsxref("Array. prototype.forEach","forEach")}}, {{jsxref("Array.prototype.map","map")}}, {{jsxref("Array.prototype.filter", "filter")}}, {{jsxref("Array.prototype.reduce", "reduce")}}, {{jsxref("Array.prototype.reduceRight", "reduceRight")}} |
{{SpecName("ES6", "#sec-array-objects", "Array")}} | {{Spec2 ("ES6")}} | Phương thức mới được thêm vào: {{jsxref ("Array.from")}}, {{jsxref ("Array.of")}}, {{jsxref ("Array.prototype.find", "find")}}, {{jsxref ("Array.prototype.findIndex", "findIndex")}}, {{jsxref ("Array.prototype.fill", "fill")}}, {{jsxref ("Array.prototype.copyWithin", "copyWithin")}} |