Eu tenho var ar = [1, 2, 3, 4, 5]
e quero alguma função getSubarray(array, fromIndex, toIndex)
, esse resultado da chamada getSubarray(ar, 1, 3)
é nova matriz [2, 3, 4]
.
javascript
arrays
Sergey Metlov
fonte
fonte
Respostas:
Dê uma olhada
Array.slice(begin, end)
fonte
ar
não está modificado.console.log(ar);
// -> [1, 2, 3, 4, 5]
Para um uso simples de
slice
, use minha extensão para Array Class:Então:
Teste1 :
<["b", "c", "fd", "ze"]
Teste2:
<["c", "fd"]
Teste3:
<["c", "fd", "ze"]
Pode ser mais fácil para desenvolvedores provenientes de outro idioma (por exemplo, Groovy).
fonte
Array.prototype.contains
paraArray.prototype.includes
.subarray
método fornece resultados inesperados.bigArr.slice(1,-1)
retorna['b','c','fd']
, o que você esperaria (o -1 bate um elemento no final da nova matriz). MasbigArr.subarray(1,-1)
retorna o mesmo quebigArr.subarray(1)
, ou seja, tudo, da posição 1 até o final debigArr
. Você também está forçando os usuários a sempre fornecer números negativos comoend
parâmetro. Qualquer umend >= -1
dá o mesmo resultado que quandoend === undefined
. Por outro lado,bigArr.slice(1,3)
retornos['b','c']
, o que novamente é esperado.fonte
A questão está realmente pedindo uma nova matriz , então acredito que uma solução melhor seria combinar a resposta de Abdennour TOUMI com uma função de clone:
[ http://stackoverflow.com/questions/728360/most-elegant-way-to-clone-a-javascript-object]
fonte
Array.prototype.slice
já retorna uma cópia.Array.prototype.splice
modifica a matriz original.slice
já retorna uma cópia superficial, tornando essasubarray
implementação desnecessária. Mas também vale a pena mencionar que você corrigiu um objeto embutido, que é um grande não-não. Veja os comentários sobre a resposta de Abdennour TOUMI .