Ich habe var ar = [1, 2, 3, 4, 5]
und wollen eine Funktion getSubarray(array, fromIndex, toIndex)
das Ergebnis des Aufrufs getSubarray(ar, 1, 3)
ist ein neues Array [2, 3, 4]
.
Antworten
Zu viele Anzeigen?Werfen Sie einen Blick auf Array.slice(begin, end)
const ar = [1, 2, 3, 4, 5];
// slice from 1..3 - add 1 as the end index is not included
const ar2 = ar.slice(1, 3 + 1);
console.log(ar2);
Für eine einfache Verwendung von slice
meine Erweiterung zur Array-Klasse verwenden:
Array.prototype.subarray = function(start, end) {
if (!end) { end = -1; }
return this.slice(start, this.length + 1 - (end * -1));
};
Dann:
var bigArr = ["a", "b", "c", "fd", "ze"];
Prüfung1 :
bigArr.subarray(1, -1);
< ["b", "c", "fd", "ze"]
Test2:
bigArr.subarray(2, -2);
< ["c", "fd"]
Test3:
bigArr.subarray(2);
< ["c", "fd", "ze"]
Dies könnte für Entwickler, die aus einer anderen Sprache (z.B. Groovy) kommen, einfacher sein.
Ich habe var ar = [1, 2, 3, 4, 5] und möchte eine Funktion getSubarray(array, fromIndex, toIndex), dass das Ergebnis des Aufrufs getSubarray(ar, 1, 3) ein neues Array [2, 3, 4] ist.
Genaue Lösung
function getSubarray(array, fromIndex, toIndex) {
return array.slice(fromIndex, toIndex+1);
}
Testen wir die Lösung
let ar = [1, 2, 3, 4, 5]
getSubarray(ar, 1, 3)
// result: [2,3,4]
Array.prototype.slice()
Die Methode slice() gibt eine flache Kopie eines Teils eines Arrays zurück in ein neues Array-Objekt zurück, das von Anfang bis Ende ausgewählt wird (Ende nicht eingeschlossen) wobei start und end den Index der Elemente in diesem Array darstellen. Die ursprüngliche Array wird nicht verändert.
Grundsätzlich können Sie mit Slice eine Unterarray aus einem Array.
Nehmen wir zum Beispiel dieses Array:
const animals = ['ant', 'bison', 'camel', 'duck', 'elephant'];
Dies zu tun:
console.log(animals.slice(2, 4));
ergibt diese Ausgabe:
// result: ["camel", "duck"]
Syntax:
slice() // creates a shallow copy of the array
slice(start) // shows only starting point and returns all values after start index
slice(start, end) // slices from start index to end index
En Frage ist eigentlich ein Antrag auf Neues Array Daher glaube ich, dass eine bessere Lösung darin bestehen würde, die Abdennour TOUMI's Antwort mit einer Klon-Funktion:
function clone(obj) {
if (null == obj || "object" != typeof obj) return obj;
const copy = obj.constructor();
for (const attr in obj) {
if (obj.hasOwnProperty(attr)) copy[attr] = obj[attr];
}
return copy;
}
// With the `clone()` function, you can now do the following:
Array.prototype.subarray = function(start, end) {
if (!end) {
end = this.length;
}
const newArray = clone(this);
return newArray.slice(start, end);
};
// Without a copy you will lose your original array.
// **Example:**
const array = [1, 2, 3, 4, 5];
console.log(array.subarray(2)); // print the subarray [3, 4, 5, subarray: function]
console.log(array); // print the original array [1, 2, 3, 4, 5, subarray: function]