Array.prototype.concat()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

Die concat() Methode von Array Instanzen wird verwendet, um zwei oder mehr Arrays zu verketten. Diese Methode ändert nicht die bestehenden Arrays, sondern gibt stattdessen ein neues Array zurück.

Probieren Sie es aus

Syntax

js
concat()
concat(value1)
concat(value1, value2)
concat(value1, value2, /* …, */ valueN)

Parameter

value1, …, valueN Optional

Arrays und/oder Werte, die in ein neues Array verkettet werden sollen. Wenn alle valueN Parameter ausgelassen werden, gibt concat eine flache Kopie des bestehenden Arrays zurück, auf dem es aufgerufen wird. Siehe die Beschreibung unten für weitere Details.

Rückgabewert

Eine neue Array Instanz.

Beschreibung

Die Methode concat erstellt ein neues Array. Das Array wird zuerst mit den Elementen des Objekts gefüllt, auf dem es aufgerufen wird. Dann wird für jedes Argument sein Wert in das Array verkettet — bei normalen Objekten oder primitiven Typen wird das Argument selbst zu einem Element des endgültigen Arrays; bei Arrays oder array-ähnlichen Objekten mit der Eigenschaft Symbol.isConcatSpreadable auf einen wahrheitsgetreuen Wert gesetzt, wird jedes Element des Arguments unabhängig zum endgültigen Array hinzugefügt. Die Methode concat rekursiert nicht in geschachtelte Array-Argumente.

Die Methode concat() ist eine kopierende Methode. Sie ändert weder this noch eines der als Argumente bereitgestellten Arrays, sondern gibt stattdessen eine flache Kopie zurück, die dieselben Elemente wie die der ursprünglichen Arrays enthält.

Die Methode concat() bewahrt leere Slots, falls eines der Quellarrays spärlich ist.

Die Methode concat() ist generisch. Der this-Wert wird auf die gleiche Weise behandelt wie die anderen Argumente (außer dass er zuerst in ein Objekt umgewandelt wird), was bedeutet, dass einfache Objekte direkt dem resultierenden Array vorangestellt werden, während array-ähnliche Objekte mit wahrheitsgetreuem [Symbol.isConcatSpreadable] in das resultierende Array aufgelöst werden.

Beispiele

Zwei Arrays verketten

Der folgende Code verknüpft zwei Arrays:

js
const letters = ["a", "b", "c"];
const numbers = [1, 2, 3];

const alphaNumeric = letters.concat(numbers);
console.log(alphaNumeric);
// results in ['a', 'b', 'c', 1, 2, 3]

Drei Arrays verketten

Der folgende Code verknüpft drei Arrays:

js
const num1 = [1, 2, 3];
const num2 = [4, 5, 6];
const num3 = [7, 8, 9];

const numbers = num1.concat(num2, num3);

console.log(numbers);
// results in [1, 2, 3, 4, 5, 6, 7, 8, 9]

Werte zu einem Array verketten

Der folgende Code verknüpft drei Werte mit einem Array:

js
const letters = ["a", "b", "c"];

const alphaNumeric = letters.concat(1, [2, 3]);

console.log(alphaNumeric);
// results in ['a', 'b', 'c', 1, 2, 3]

Verschachtelte Arrays verketten

Der folgende Code verknüpft verschachtelte Arrays und demonstriert die Beibehaltung von Referenzen:

js
const num1 = [[1]];
const num2 = [2, [3]];

const numbers = num1.concat(num2);

console.log(numbers);
// results in [[1], 2, [3]]

// modify the first element of num1
num1[0].push(4);

console.log(numbers);
// results in [[1, 4], 2, [3]]

Array-artige Objekte mit Symbol.isConcatSpreadable verketten

concat behandelt nicht alle array-artigen Objekte standardmäßig als Arrays — nur, wenn Symbol.isConcatSpreadable auf einen wahrheitsgetreuen Wert (z.B. true) gesetzt ist.

js
const obj1 = { 0: 1, 1: 2, 2: 3, length: 3 };
const obj2 = { 0: 1, 1: 2, 2: 3, length: 3, [Symbol.isConcatSpreadable]: true };
console.log([0].concat(obj1, obj2));
// [ 0, { '0': 1, '1': 2, '2': 3, length: 3 }, 1, 2, 3 ]

Verwendung von concat() auf spärlichen Arrays

Wenn eines der Quellarrays spärlich ist, wird das resultierende Array ebenfalls spärlich sein:

js
console.log([1, , 3].concat([4, 5])); // [1, empty, 3, 4, 5]
console.log([1, 2].concat([3, , 5])); // [1, 2, 3, empty, 5]

Aufruf von concat() auf Nicht-Array-Objekten

Wenn der this-Wert kein Array ist, wird er in ein Objekt umgewandelt und dann auf dieselbe Weise wie die Argumente für concat() behandelt. In diesem Fall ist der Rückgabewert immer ein einfaches neues Array.

js
console.log(Array.prototype.concat.call({}, 1, 2, 3)); // [{}, 1, 2, 3]
console.log(Array.prototype.concat.call(1, 2, 3)); // [ [Number: 1], 2, 3 ]
const arrayLike = {
  [Symbol.isConcatSpreadable]: true,
  length: 2,
  0: 1,
  1: 2,
  2: 99, // ignored by concat() since length is 2
};
console.log(Array.prototype.concat.call(arrayLike, 3, 4)); // [1, 2, 3, 4]

Spezifikationen

Specification
ECMAScript Language Specification
# sec-array.prototype.concat

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch