Javascript.RU

slice

Синтаксис

arrayObj.slice( start[, end] )

Аргументы

start
Индекс элемента в массиве, с которого будет начинаться новый массив.
end
Необязательный параметр. Индекс элемента в массиве, на котором новый массив завершится. При этом последним в новом массиве будет элемент с индексом end-1
  • Если start отрицателен, то он будет трактоваться как arrayObj.length+start (т.е. start'ый элемент с конца массива).
  • Если end отрицателен, то он будет трактоваться как arrayObj.length+end (т.е. end'ый элемент с конца массива).
  • Если второй параметр не указан, то экстракция продолжится до конца массива. Если end < start, то будет создан пустой массив.

Описание, примеры

Данный метод не изменяет исходный массив, а просто возвращает его часть.

Пример: Элементы из середины
var arr = [ 1, 2, 3, 4, 5 ] 

arr.slice(2) // => [3, 4, 5]

arr.slice(1, 4) // => [2, 3, 4]

arr.slice(2, 3) // => [3]
Пример: Отсчет с конца
arr = [1, 2, 3, 4, 5]

arr.slice(-2) // => [4, 5]
arr.slice(arr.length - 2) // то же самое

arr.slice(-3, -1) // [3, 4]
arr.slice(arr.length-3, arr.length-1) // то же самое

Автор: Гость (не зарегистрирован), дата: 12 декабря, 2011 - 21:34
#permalink

А как будет с многомерными массивами?


Автор: Harvey, дата: 25 июня, 2012 - 13:23
#permalink

Для многомерных массивов нужно использовать схожую функцию - splice()


Автор: nero333, дата: 13 ноября, 2012 - 15:10
#permalink

Можете привести пример, как использовать splice() для многомерных массивов?


Автор: Илья Кантор, дата: 29 февраля, 2012 - 13:26
#permalink

Многомерность не учитывается.


Автор: Гость (не зарегистрирован), дата: 14 апреля, 2012 - 12:12
#permalink

start тоже не обязательный параметр. slice без параметров копирует массив


Автор: Гость (не зарегистрирован), дата: 22 августа, 2013 - 05:38
#permalink

Почему нет ни слова о том, что этот метод практически так же работает и для строк?! Что он вообще там есть


Автор: Гость (не зарегистрирован), дата: 30 августа, 2013 - 15:01
#permalink

Наверное потому, что у строк — другой метод с таким же названием. А этот метод для массивов.


Автор: kovalsky (не зарегистрирован), дата: 26 декабря, 2013 - 18:48
#permalink

"Данный метод не изменяет исходный массив" - изменяет!
попробуйте:
var arr = [1,2,3];
arr.splice(1,1)
console.log(arr);


Автор: kovalsky (не зарегистрирован), дата: 27 декабря, 2013 - 15:15
#permalink

Извините, перепутал методы. Всего одна буква а какая разница в поведении.


Автор: Ilyas (не зарегистрирован), дата: 28 апреля, 2015 - 13:23
#permalink

slice хороший способ клонировать массив,
Например

var arr1 = [1, 2, 3, 4];
var arr2 = arr1;
var arr3 =arr2.slice(0)

console.assert(arr1 === arr2);
console.assert(arr1 !== arr3);

Автор: FeelUs, дата: 23 февраля, 2016 - 11:14
#permalink

следующий код

var a = [{x:1},{x:2},{x:3},{x:4},];
var b = a.slice(1,2);
b[0].x=7;
alert(JSON.stringify(a))

выведет

[{"x":1},{"x":7},{"x":3},{"x":4}]

но вот так:

var a = [1,2,3,4];
var b = a.slice(1,2);
b[0]=7;
text(JSON.stringify(a))

уже

[1,2,3,4]

Автор: Гость (не зарегистрирован), дата: 9 июня, 2016 - 11:38
#permalink

Не надо путать копирование по ссылке и копирование по значению


 
Поиск по сайту
Содержание

Учебник javascript

Основные элементы языка

Сундучок с инструментами

Интерфейсы

Все об AJAX

Оптимизация

Разное

Дерево всех статей

Последние темы на форуме
Forum