Phương thức concat()
dùng để kết nối 2 hay nhiều mảng với nhau. Phương thức này không làm thay đổi các mảng đã có mà thay vào đó sẽ trả về 1 mảng mới.
The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone https://github.com/mdn/interactive-examples and send us a pull request.
Cú pháp
var newArray = oldArray.concat(value1[, value2[, ...[, valueN]]])
Tham số
valueN
- Các giá trị hay mảng dùng để nối lại với nhau trong mảng mới .
Giá trị trả về
Một mảng Array
mới.
Mô tả
Phương thức concat
tạo ra 1 mảng mới bao gồm các phần tử trong đối tượng mà nó được gọi thực thi, và theo thứ tự lần lượt, với mỗi tham số truyền vào là các phần tử của tham số đó (nếu tham số truyền vào là 1 mảng) hoặc là chính tham số đó (nếu tham số truyền vào không phải là 1 mảng). Phương thức này sẽ không thực thi 1 cách đệ quy cho các tham số là mảng lồng nhau.
Phương thức concat
không thay đổi this
(mảng được gọi thực thi) hay bất cứ mảng được truyền vào làm tham số mà thay vào đó nó sẽ trả về 1 bản sao tham chiếu (shallow copy) bao gồm các bản sao của cùng 1 phần tử được kết hợp từ các mảng ban đầu. Các phần từ của mảng ban đầu được sao chép vào mảng mới như sau:
- Đối với tham chiếu đối tượng (và không phải đối tượng thực tế):
concat
sao chép tham chiếu đối tượng vào mảng mới. Cả mảng ban đầu và mảng mới đều tham chiếu tới cùng 1 đối tượng. Nghĩa là nếu đối tượng được tham chiếu tới bị thay đổi thì việc thay đổi đó sẽ ảnh hưởng trong cả mảng ban đầu và mảng mới. Điều này bao gồm các phần tử của các mảng làm tham số cũng đều là mảng. - Đối với dữ liệu kiểu chuỗi(strings), số(numbers), và booleans (không phải là các đối tượng kiểu
String
,Number
, vàBoolean
):concat
sẽ sao chép giá trị của chuỗi, số vào mảng mới.
Chú ý: Việc ghép nối các mảng hay giá trị sẽ không "đụng chạm" tới các giá trị ban đầu. Hơn nữa, bất cứ thao tác nào trên mảng trả về (ngoại trừ các thao tác trên các phần từ là tham chiếu đối tượng) sẽ không ảnh hưởng tới các mảng ban đầu, và ngược lại.
Ví dụ
Nối 2 mảng
Đoạn mã dưới đây sẽ nối 2 mảng lại với nhau:
var alpha = ['a', 'b', 'c'];
var numeric = [1, 2, 3];
alpha.concat(numeric);
// result in ['a', 'b', 'c', 1, 2, 3]
Nối 3 mảng
Đoạn mã dưới đây sẽ nối 3 mảng lại với nhau
var num1 = [1, 2, 3],
num2 = [4, 5, 6],
num3 = [7, 8, 9];
var nums = num1.concat(num2, num3);
console.log(nums);
// results in [1, 2, 3, 4, 5, 6, 7, 8, 9]
Nối các giá trị vào 1 mảng
Đoạn mã sau đây sẽ nối 3 giá trị vào 1 mảng:
var alpha = ['a', 'b', 'c'];
var alphaNumeric = alpha.concat(1, [2, 3]);
console.log(alphaNumeric);
// results in ['a', 'b', 'c', 1, 2, 3]
Nối mảng lồng nhau
Đoạn mã sau đây sẽ nối các mảng lồng nhau và thể hiện sự lưu trữ tham chiếu:
var num1 = [[1]];
var num2 = [2, [3]];
var nums = num1.concat(num2);
console.log(nums);
// results in [[1], 2, [3]]
// modify the first element of num1
num1[0].push(4);
console.log(nums);
// results in [[1, 4], 2, [3]]
Đặc tả
Đặc tả | Trạng thái | Ghi chú |
---|---|---|
ECMAScript 3rd Edition (ECMA-262) | Standard | Định nghĩa lần đầu. Hiện thực trong JavaScript 1.2. |
ECMAScript 5.1 (ECMA-262) The definition of 'Array.prototype.concat' in that specification. |
Standard | |
ECMAScript 2015 (6th Edition, ECMA-262) The definition of 'Array.prototype.concat' in that specification. |
Standard | |
ECMAScript (ECMA-262) The definition of 'Array.prototype.concat' in that specification. |
Living Standard |
Tương thích trình duyệt
BCD tables only load in the browser
Xem thêm
push
/pop
— thêm/xóa phần tử từ cuối mảngunshift
/shift
— thêm/xóa các phần tử từ đầu mảngsplice
— thêm/xóa các phần tử tại vị trí xác định trong mảngString.prototype.concat()
Symbol.isConcatSpreadable
– control flattening.