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]
.
javascript
arrays
Sergey Metlov
fuente
fuente
Respuestas:
Echa un vistazo a
Array.slice(begin, end)
fuente
ar
no ha sido modificado.console.log(ar);
// -> [1, 2, 3, 4, 5]
Para un uso simple de
slice
, use mi extensión a Array Class:Luego:
Prueba1 :
<["b", "c", "fd", "ze"]
Test2:
<["c", "fd"]
Test3:
<["c", "fd", "ze"]
Podría ser más fácil para los desarrolladores que vienen de otro idioma (es decir, Groovy).
fuente
Array.prototype.contains
aArray.prototype.includes
.subarray
método ofrece resultados inesperados.bigArr.slice(1,-1)
devuelve['b','c','fd']
, lo que cabría esperar (el -1 elimina un elemento del final de la nueva matriz). PerobigArr.subarray(1,-1)
devuelve lo mismo quebigArr.subarray(1)
, es decir todo desde la posición 1 hasta el final debigArr
. También está obligando a los usuarios a dar siempre números negativos comoend
parámetro. Cualquieraend >= -1
da el mismo resultado que cuandoend === undefined
. Por otro lado,bigArr.slice(1,3)
regresa['b','c']
, lo que nuevamente se espera.fuente
La pregunta en realidad es pedir una nueva matriz , por lo que creo que una mejor solución sería combinar la respuesta de Abdennour TOUMI con una función de clonación:
[ http://stackoverflow.com/questions/728360/most-elegant-way-to-clone-a-javascript-object]
fuente
Array.prototype.slice
devuelve una copia ya.Array.prototype.splice
modifica la matriz original.slice
ya devuelve una copia superficial, haciendosubarray
innecesaria esta implementación. Pero también vale la pena mencionar que ha parcheado un mono un objeto incorporado, que es un gran no-no. Ver los comentarios sobre la respuesta de Abdennour TOUMI .