Ich habe var ar = [1, 2, 3, 4, 5]
und möchte eine Funktion getSubarray(array, fromIndex, toIndex)
, das Ergebnis des Aufrufs getSubarray(ar, 1, 3)
ist ein neues Array [2, 3, 4]
.
javascript
arrays
Sergey Metlov
quelle
quelle
Antworten:
Schau es dir an
Array.slice(begin, end)
quelle
ar
unverändert ist.console.log(ar);
// -> [1, 2, 3, 4, 5]
Verwenden Sie für eine einfache Verwendung von
slice
meine Erweiterung für Array-Klasse:Dann:
Test1 :
<["b", "c", "fd", "ze"]
Test2:
<["c", "fd"]
Test3:
<["c", "fd", "ze"]
Könnte für Entwickler aus einer anderen Sprache (z. B. Groovy) einfacher sein.
quelle
Array.prototype.contains
in erzwingtArray.prototype.includes
.subarray
Methode unerwartete Ergebnisse liefert.bigArr.slice(1,-1)
gibt zurück['b','c','fd']
, was Sie erwarten würden (-1 schlägt ein Element vom Ende des neuen Arrays ab). AberbigArr.subarray(1,-1)
kehrt das gleiche wiebigArr.subarray(1)
, was zu sagen ist alles von der Position 1 bis zum EndebigArr
. Sie zwingen Benutzer außerdem, immer negative Zahlen alsend
Parameter anzugeben. Irgendeinend >= -1
ergibt das gleiche Ergebnis wie wannend === undefined
. Auf der anderen SeitebigArr.slice(1,3)
kehrt zurück['b','c']
, was wiederum erwartet wird.quelle
Die Frage ist tatsächlich nach einem neuen Array gefragt , daher glaube ich, dass eine bessere Lösung darin besteht, die Antwort von Abdennour TOUMI mit einer Klonfunktion zu kombinieren :
[ http://stackoverflow.com/questions/728360/most-elegant-way-to-clone-a-javascript-object]
quelle
Array.prototype.slice
gibt bereits eine Kopie zurück.Array.prototype.splice
Ändert das ursprüngliche Array.slice
bereits eine flache Kopie zurückgegeben, sodass diesesubarray
Implementierung nicht erforderlich ist. Es ist aber auch erwähnenswert, dass Sie ein eingebautes Objekt mit Affen gepatcht haben, was ein großes Nein-Nein ist. Siehe die Kommentare zur Antwort von Abdennour TOUMI .