386 Stimmen

Wie erhält man ein Subarray aus einem Array?

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] .

578voto

Alex K. Punkte 165323

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);

17voto

Abdennour TOUMI Punkte 75271

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.

7voto

hannad rehman Punkte 3663
const array_one = [11, 22, 33, 44, 55];
const start = 1;
const end = array_one.length - 1;
const array_2 = array_one.slice(start, end);
console.log(array_2);

7voto

Stas Sorokin Punkte 1673

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

Siehe Referenz für flache Kopien

1voto

user73362 Punkte 353

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]

[ [http://stackoverflow.com/questions/728360/most-elegant-way-to-clone-a-javascript-object\]](http://stackoverflow.com/questions/728360/most-elegant-way-to-clone-a-javascript-object])

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X