Я имею var ar = [1, 2, 3, 4, 5]
и хочу некоторую функцию getSubarray(array, fromIndex, toIndex)
, чтобы результат вызова getSubarray(ar, 1, 3)
был новым массивом [2, 3, 4]
.
javascript
arrays
Сергей Метлов
источник
источник
Ответы:
Взгляни на
Array.slice(begin, end)
источник
ar
не модифицирован.console.log(ar);
// -> [1, 2, 3, 4, 5]
Для простого использования
slice
используйте мое расширение для класса Array:Затем:
Тест1 :
<["b", "c", "fd", "ze"]
Test2:
<["c", "fd"]
Test3:
<["c", "fd", "ze"]
Может быть проще для разработчиков, пришедших с другого языка (например, Groovy).
источник
Array.prototype.contains
дляArray.prototype.includes
.subarray
метод дает неожиданные результаты.bigArr.slice(1,-1)
возвращает['b','c','fd']
, что вы ожидаете (-1 сбивает один элемент с конца нового массива). НоbigArr.subarray(1,-1)
возвращает так же, какbigArr.subarray(1)
, то есть все от позиции 1 до концаbigArr
. Вы также заставляете пользователей всегда указывать отрицательные числа в качествеend
параметра. Любойend >= -1
дает тот же результат, что и когдаend === undefined
. С другой стороны,bigArr.slice(1,3)
возвращается['b','c']
, что снова ожидается.источник
Вопрос на самом деле просить новый массив , поэтому я считаю, что лучшее решение было бы совместить ответ Abdennour Того в с функцией клонирования:
[ http://stackoverflow.com/questions/728360/most-elegant-way-to-clone-a-javascript-object]
источник
Array.prototype.slice
возвращает копию уже.Array.prototype.splice
изменяет исходный массивslice
уже возвращает мелкую копию, что делает этуsubarray
реализацию ненужной. Но также стоит упомянуть, что вы залатали обезьяны встроенным объектом, что является большим нет-нет. Смотрите комментарии к ответу Абденнура TOUMI .