¿Cómo obtener un subconjunto de una matriz?

Resuelto Sergey Metlov asked hace 13 años • 5 respuestas

Tengo var ar = [1, 2, 3, 4, 5]y quiero alguna función getSubarray(array, fromIndex, toIndex), ese resultado de la llamada getSubarray(ar, 1, 3)es una nueva matriz [2, 3, 4].

Sergey Metlov avatar Sep 24 '11 17:09 Sergey Metlov
Aceptado

Echa un vistazo aArray.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);
Expandir fragmento

Alex K. avatar Sep 24 '2011 10:09 Alex K.

Para un uso simple slice, use mi extensión para Array Class:

Array.prototype.subarray = function(start, end) {
    if (!end) { end = -1; } 
    return this.slice(start, this.length + 1 - (end * -1));
};

Entonces:

var bigArr = ["a", "b", "c", "fd", "ze"];

Prueba1 :

bigArr.subarray(1, -1);

< ["b", "c", "fd", "ze"]

Prueba2:

bigArr.subarray(2, -2);

< ["c", "fd"]

Prueba3:

bigArr.subarray(2);

< ["c", "fd","ze"]

Podría ser más fácil para los desarrolladores que vienen de otro idioma (es decir, Groovy).

Abdennour TOUMI avatar Aug 21 '2013 13:08 Abdennour TOUMI

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

hannad rehman avatar Mar 08 '2017 11:03 hannad rehman

Tengo var ar = [1, 2, 3, 4, 5] y quiero alguna función getSubarray(array, fromIndex, toIndex), ese resultado de la llamada getSubarray(ar, 1, 3) es una nueva matriz [2, 3, 4 ].

Solución exacta

function getSubarray(array, fromIndex, toIndex) {
    return array.slice(fromIndex, toIndex+1);
}

Probemos la solución

let ar = [1, 2, 3, 4, 5]
getSubarray(ar, 1, 3)

// result: [2,3,4]

Array.prototype.slice()

El método slice() devuelve una copia superficial de una parte de una matriz en un nuevo objeto de matriz seleccionado de principio a fin (no incluido el final), donde el inicio y el final representan el índice de los elementos de esa matriz. La matriz original no se modificará.

Básicamente, el segmento le permite seleccionar un subarreglo de un arreglo.

Por ejemplo, tomemos esta matriz:

const animals = ['ant', 'bison', 'camel', 'duck', 'elephant'];

Haciendo esto:

console.log(animals.slice(2, 4));

Nos dará esta salida:

// result: ["camel", "duck"]

Sintaxis:

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

Ver referencia de copia superficial

Stas Sorokin avatar Feb 06 '2022 14:02 Stas Sorokin