Mam var ar = [1, 2, 3, 4, 5]
i chcę jakąś funkcję getSubarray(array, fromIndex, toIndex)
, rezultatem wywołania getSubarray(ar, 1, 3)
jest nowa tablica [2, 3, 4]
.
javascript
arrays
Siergiej Metłow
źródło
źródło
Odpowiedzi:
Spojrzeć na
Array.slice(begin, end)
źródło
ar
jest niezmodyfikowany.console.log(ar);
// -> [1, 2, 3, 4, 5]
Dla prostego użycia
slice
użyj mojego rozszerzenia do Array Class:Następnie:
Test1 :
<[„b”, „c”, „fd”, „ze”]
Test2:
<[„c”, „fd”]
Test3:
<[„c”, „fd”, „ze”]
Może być łatwiej dla programistów pochodzących z innego języka (np. Groovy).
źródło
Array.prototype.contains
naArray.prototype.includes
.subarray
metoda zapewnia nieoczekiwane wyniki.bigArr.slice(1,-1)
zwraca['b','c','fd']
, czego można się spodziewać (-1 wyrzuca jeden element z końca nowej tablicy). AlebigArr.subarray(1,-1)
zwraca to samobigArr.subarray(1)
, co znaczy wszystko od pozycji 1 do końcabigArr
. Zmuszasz również użytkowników do podawania liczb ujemnych jakoend
parametru. Dowolnyend >= -1
daje taki sam wynik jak wtedyend === undefined
. Z drugiej stronybigArr.slice(1,3)
zwraca['b','c']
, co znów jest oczekiwane.źródło
Pytanie jest rzeczywiście z prośbą o nową tablicę , więc uważam, że lepszym rozwiązaniem byłoby połączenie odpowiedź Abdennour Toumi jest z funkcją klon:
[ http://stackoverflow.com/questions/728360/most-elegant-way-to-clone-a-javascript-object]
źródło
Array.prototype.slice
zwraca już kopię.Array.prototype.splice
modyfikuje oryginalną tablicę.slice
zwraca już płytką kopię, dzięki czemusubarray
wdrożenie nie jest konieczne. Ale warto również wspomnieć, że załatałeś małpy wbudowany obiekt, co jest dużym nie-nie. Zobacz komentarze do odpowiedzi Abdennour TOUMI .