Wie schneide ich ein Array einfach mit JavaScript ab?

102

Linq verfügt über eine praktische Operatormethode, mit Take()der eine bestimmte Anzahl von Elementen in allen implementierten Elementen zurückgegeben werden kann IEnumerable. Gibt es in jQuery etwas Ähnliches für die Arbeit mit Arrays?

Oder anders gefragt: Wie kann ich ein Array in Javascript abschneiden?

Alan Le
quelle
22
Leute, bitte lernt JavaScript vor jQuery. Ich fürchte, die Fragen von morgen lauten: "Welche anderen Datentypen stellt jQuery neben Arrays zur Verfügung?".
Ionuț G. Stan

Antworten:

184

Es gibt eine Slice- Methode

array.slice(0, 4);

Gibt die ersten vier Elemente zurück.

Vergessen Sie nicht, es Ihrer Variablen wieder zuzuweisen, wenn Sie die anderen Werte verwerfen möchten.

Hinweis: Dies ist nur normales Javascript, es ist keine Abfrage erforderlich.

Bob
quelle
15
Würde nicht (0,4) die ersten 4 zurückgeben, nicht die ersten 5?
Simon Keep
11
Das stimmt eigentlich nicht. Simon Keep ist korrekt - das zweite Argument der .slice () -Methode ist die Array-Position nach dem letzten Element, das zurückgegeben wird. array.slice (0, 4) würde die Elemente 0, 1, 2 und 3 zurückgeben - insgesamt 4 Elemente. Stellen Sie sich das zweite Argument als Grenzwert vor, an dem .slice (0, x) alle Elemente vom Anfang des Arrays bis x zurückgibt, jedoch nicht einschließt.
Bungle
1
endist NICHT enthalten, dann ist @SimonKeep richtig, siehe MDN developer.mozilla.org/en-US/docs/JavaScript/Reference/…
AsTeR
2
Denken Sie daran, es wieder der Variablen zuzuweisen, es ist sehr wichtig, so einfach es scheint
kolexinfos
6
Auf schlechte Weise erstellen Sie eine neue Array-Instanz. Beachten Sie die Speichernutzung, wenn das Codieren von js keine schlechte Idee ist.
G. Ghez
125

(2 Jahre später ...) Wenn Sie wirklich ein Array abschneiden möchten, können Sie auch das folgende lengthAttribut verwenden:

var stooges = ["Moe", "Larry", "Shemp", "Curly", "Joe"];
stooges.length = 3; // now stooges is ["Moe", "Larry", "Shemp"]

Hinweis: Wenn Sie eine Länge zuweisen, die länger als die aktuelle Länge ist, werden undefinierte Array-Elemente eingeführt, wie unten gezeigt.

var stooges = ["Moe", "Larry", "Shemp"];
stooges.length = 5;
alert(typeof stooges[4]); // alerts "undefined"

BEARBEITEN:

Wie unten erwähnt, kann das Hinzufügen von undefinierten Elementen auf folgende Weise vermieden werden:

var stooges = ["Moe", "Larry", "Shemp"];
stooges.length = Math.min(stooges.length, 5); 
alert(stooges.length)// alerts "3"
Jonathan M.
quelle
5
Ich war zuerst überrascht, als ich dies in einem Code sah ... Aber es ist der beste Weg (wenn Sie von Index 0 abschneiden
kumarharsh
5
Dies ist eine erstaunlich einfache Lösung.
Dominique
3
Was ist mit der Müllabfuhr auf diese Weise?
G. Ghez
1
@JonathanM Eigentlich werden keine Nullwerte eingeführt. Die neuen Variablen sind undefiniert, da sie deklariert sind, aber keinen Wert erhalten.
Håvard Geithus
3
Tolle! Es ist erwähnenswert, dass diese Methode dieselbe modifiziert, Arrayanstatt eine neue zu erstellen Array.
Geräumiger
22

Wenn Sie sich fragen, wie Sie abschneiden sollen (ändern Sie ein Array, indem Sie die Elemente vom Ende entfernen), verwenden Sie splice :

var a1 = [2,4,6,8];
var a2 = a1.splice(-2,2); // a1=[2,4], a2=[6,8]

Wenn Sie fragen, wie Sie eine Teilmenge eines Arrays abrufen können, ohne das Original zu ändern, verwenden Sie Slice .

var a1 = [2,4,6,8];
var a2 = a1.slice(-2); // a1=[2,4,6,8], a2=[6,8]

Denken Sie daran, Spleiß modifiziert, Slice-Zugriffe. Negative Zahlen als erstes Argument geben den Index vom Ende des Arrays an.

Chadwick
quelle
11

Setzen Sie die Eigenschaft .length auf einen niedrigeren Wert.

Offizielle Dokumentation: Array.prototype.length

G. Ghez
quelle
3
Um alle Elemente im Array zu löschen, ist es am einfachsten, die Länge auf Null zu setzen.
Hanmari
5

Wenn Sie die Elemente sowohl abrufen als auch aus dem Array entfernen möchten, verwenden Sie splice .

Wenn Sie die Elemente im Array behalten möchten, verwenden Sie Slice

PatrikAkerstrand
quelle
2

Wenn Sie Elemente selektiv aus einem Array ziehen möchten, können Sie jQuery.grep verwenden Methode verwenden.

(aus den jQuery-Dokumenten)

var arr = [ 1, 9, 3, 8, 6, 1, 5, 9, 4, 7, 3, 8, 6, 9, 1 ];

$("div").text(arr.join(", "));

arr = jQuery.grep(arr, function(n, i){
  return (n != 5 && i > 4);
});

$("p").text(arr.join(", "));

arr = jQuery.grep(arr, function (a) { return a != 9; });
$("span").text(arr.join(", "));
ScottKoon
quelle