J'ai var ar = [1, 2, 3, 4, 5]
et veux une fonction getSubarray(array, fromIndex, toIndex)
, le résultat de l'appel getSubarray(ar, 1, 3)
est un nouveau tableau [2, 3, 4]
.
javascript
arrays
Sergey Metlov
la source
la source
Réponses:
Jeter un coup d'œil à
Array.slice(begin, end)
la source
ar
n'est pas modifié.console.log(ar);
// -> [1, 2, 3, 4, 5]
Pour une utilisation simple de
slice
, utilisez mon extension à Array Class:Ensuite:
Test1 :
<["b", "c", "fd", "ze"]
Test2:
<["c", "fd"]
Test3:
<["c", "fd", "ze"]
Cela pourrait être plus facile pour les développeurs venant d'une autre langue (par exemple Groovy).
la source
Array.prototype.contains
enArray.prototype.includes
.subarray
méthode fournit des résultats inattendus.bigArr.slice(1,-1)
renvoie['b','c','fd']
, ce à quoi vous vous attendez (le -1 fait tomber un élément de la fin du nouveau tableau). MaisbigArr.subarray(1,-1)
renvoie le même quebigArr.subarray(1)
, c'est-à-dire tout de la position 1 à la fin debigArr
. Vous forcez également les utilisateurs à toujours donner des nombres négatifs commeend
paramètre. Toutend >= -1
donne le même résultat que lorsqueend === undefined
. D'un autre côté, lesbigArr.slice(1,3)
retours['b','c']
, ce qui est à nouveau attendu.la source
La question est en fait de demander un nouveau tableau , donc je pense qu'une meilleure solution serait de combiner la réponse d'Abdennour TOUMI avec une fonction de clonage:
[ http://stackoverflow.com/questions/728360/most-elegant-way-to-clone-a-javascript-object]
la source
Array.prototype.slice
renvoie déjà une copie.Array.prototype.splice
modifie le tableau d'origine.slice
renvoie déjà une copie superficielle, rendant cettesubarray
implémentation inutile. Mais il convient également de mentionner que vous avez patché un objet intégré avec un singe, ce qui est un gros non. Voir les commentaires sur la réponse d'Abdennour TOUMI .