Привет, Хабр! Представляю вашему вниманию перевод статьи “Array.splice and Array.slice in JavaScript” автора Kunal Tandon.
Вы просто обязаны использовать вышеупомянутые функции, доступные в прототипе JavaScript Array. Но они выглядят так похоже, что иногда можно запутаться между ними.
Array.splice изменяет исходный массив и возвращает массив, содержащий удаленные элементы.
Array.slice не изменяет исходный массив. Он просто возвращает новый массив элементов, который является подмножеством исходного массива.
Splice используется для изменения содержимого массива, которое включает удаление элементов, замену существующих элементов или даже добавление новых элементов в этот массив.
При использовании splice функции обновляется исходный массив.
Рассмотрим следующий массив:
arr.splice (fromIndex, itemsToDelete, item1ToAdd, item2ToAdd, ...);
Чтобы удалить элементы из массива, мы пишем:
Это удалит два элемента, начиная с индекса 3, и вернет удаленный массив. В результате получаем:
Чтобы добавить новые элементы в массив, мы пишем:
Начиная со второго элемента массива будут добавлены числа 100 и 101. Окончательные значения будут следующими:
Мы можем хитро изменить существующий элемент в массиве, используя splice, чтобы удалить элемент по номеру его индекса и вставить новый элемент на его место.
Чтобы заменить 3 на 100, мы пишем:
Мы получаем следующие значения для arr и arr2 после выполнения приведенного выше фрагмента кода:
В то время как splice может также вставлять и обновлять элементы массива, функция slice используется только для удаления элементов из массива.
Мы можем только удалить элементы из массива, используя функцию slice
Array.slice синтакси
arr.slice (startIndex, endIndex);
startIndex — начальный индекс элемента для нового массива, который мы должны получить в новом массиве
startIndex.endIndex (необязательно) — конечный индекс, до которого должно быть выполнено нарезание, не включая этот элемент.
Рассмотрим следующий массив:
Чтобы получить часть массива из значений [2, 3, 4, 5], пишем:
Обратите внимание, что здесь мы указали вторым аргументом 6, а не 5. После выполнения приведенного выше кода, мы получаем следующий массив:
Переменная arr остается неизменной после выполнения оператора slice, тогда как оператор splice обновлял исходный массив.
Итак, если мы хотим обновить исходный массив, мы используем функцию splice, но если нам нужна только часть массива, мы используем slice.
Вы просто обязаны использовать вышеупомянутые функции, доступные в прототипе JavaScript Array. Но они выглядят так похоже, что иногда можно запутаться между ними.
Ключевые различия
Array.splice изменяет исходный массив и возвращает массив, содержащий удаленные элементы.
Array.slice не изменяет исходный массив. Он просто возвращает новый массив элементов, который является подмножеством исходного массива.
Array.splice
Splice используется для изменения содержимого массива, которое включает удаление элементов, замену существующих элементов или даже добавление новых элементов в этот массив.
При использовании splice функции обновляется исходный массив.
Рассмотрим следующий массив:
const arr = [0, 1, 2, 3, 4, 5, 6, 7, 8];
Array.spliceс синтаксис
arr.splice (fromIndex, itemsToDelete, item1ToAdd, item2ToAdd, ...);
Удаление элементов
Чтобы удалить элементы из массива, мы пишем:
var deleItems = arr.splice (3, 2);
Это удалит два элемента, начиная с индекса 3, и вернет удаленный массив. В результате получаем:
deleItems // [3, 4]
arr // [0, 1, 2, 5, 6, 7, 8]
Добавление новых элементов
Чтобы добавить новые элементы в массив, мы пишем:
const arr = [0, 1, 2, 3, 4, 5, 6, 7, 8];
var arr2 = arr.splice (2, 0, 100, 101);
Начиная со второго элемента массива будут добавлены числа 100 и 101. Окончательные значения будут следующими:
arr2 // [], так как мы не удалили элемент из массив
аarr // [0, 1, 100, 101, 2, 3, 4, 5, 6, 7, 8]
Изменение существующего элемента
Мы можем хитро изменить существующий элемент в массиве, используя splice, чтобы удалить элемент по номеру его индекса и вставить новый элемент на его место.
const arr = [0, 1, 2, 3, 4, 5, 6, 7, 8];
Чтобы заменить 3 на 100, мы пишем:
var arr2 = arr.splice (3, 1, 100);
// что означает - в индексе 3 удалить 1 элемент и вставить 100
Мы получаем следующие значения для arr и arr2 после выполнения приведенного выше фрагмента кода:
arr2 // [3] так как мы удалили элемент 3 из массив arr
arr // [0, 1, 2, 100, 4, 5, 6, 7, 8]
// 3 заменяется на 100 в массиве arr
Array.slice
В то время как splice может также вставлять и обновлять элементы массива, функция slice используется только для удаления элементов из массива.
Мы можем только удалить элементы из массива, используя функцию slice
Array.slice синтакси
arr.slice (startIndex, endIndex);
startIndex — начальный индекс элемента для нового массива, который мы должны получить в новом массиве
startIndex.endIndex (необязательно) — конечный индекс, до которого должно быть выполнено нарезание, не включая этот элемент.
Рассмотрим следующий массив:
const arr = [0, 1, 2, 3, 4, 5, 6, 7, 8];
Чтобы получить часть массива из значений [2, 3, 4, 5], пишем:
var slicedArr = arr.slice (2, 6);
Обратите внимание, что здесь мы указали вторым аргументом 6, а не 5. После выполнения приведенного выше кода, мы получаем следующий массив:
arr // [0, 1, 2, 3, 4, 5, 6, 7, 8]
slicedArr // [2, 3, 4, 5]
Переменная arr остается неизменной после выполнения оператора slice, тогда как оператор splice обновлял исходный массив.
Итак, если мы хотим обновить исходный массив, мы используем функцию splice, но если нам нужна только часть массива, мы используем slice.
Комментарии (9)
777Polar_Fox777
17.11.2019 16:00Это удалит один элемент, начиная с индекса 3, и вернет удаленный массив.
А в коде написано 2.
Array.splicec синиаксис
Лишняя с?
Homer4ik
17.11.2019 16:00var deleItems = arr.splice (3, 2);
Это удалит один элемент, начиная с индекса 3, и вернет удаленный массив.
Но почему же удалит один элемент?
Riim
Array.splice
этоArray.splice
— статический метод класса Array. Если нужно кратко записать метод экземпляра (Array.prototype.splice
), то обычно используется записьArray#splice
.SNegreev Автор
Спасибо. Буду знать.
TheShock
Ну так исправьте ошибку в статье)
SNegreev Автор
Я еще раз обдумал Ваше замечания и решил, что все таки автор в этой записи «Array.splice» имеет ввиду не статический метод экземпляра Array, а подразумевает гипотетический массив Array. Не буду менять написание автора.
И как мне кажется статья рассчитана для начинающих программистов, которые могут не знать что такое метод экземпляра, и их такая запись «Array#splice» может запутать.
TheShock
Однозначно путает использование написание в виде статического метода.
Что-то непонятное всегда путает меньше, чем что-то неправильное