Javascript что такое метод slice

slice

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

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) // то же самое

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

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

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

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

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

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

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

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

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

это што за говностатья? где описание, что именно делает эта функция?

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

var arr1 = [1, 2, 3, 4]; var arr2 = arr1; var arr3 =arr2.slice(0) console.assert(arr1 === arr2); console.assert(arr1 !== arr3);
var a = [,,,,]; var b = a.slice(1,2); b[0].x=7; alert(JSON.stringify(a))
var a = [1,2,3,4]; var b = a.slice(1,2); b[0]=7; text(JSON.stringify(a))

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

Отправить комментарий

  • Полезные.
  • Дополняющие прочитанное.
  • Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
    Для остальных вопросов и обсуждений есть форум.

Учебник javascript

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

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

Интерфейсы

Все об AJAX

Оптимизация

Разное

  • Асинхронное программирование
  • Google Gears в деталях
  • Javascript Flash мост
  • Букмарклеты и правила их написания
  • О подборке книг на сайте
  • Почему — плохо
  • Способы идентификации в интернете
  • Уровни DOM
  • Что почитать?
  • Шаблонизация с javascript
  • Юнит-тесты уровня браузера на связке Selenium + PHP.
  • Справочники: Javascript/HTML/CSS
  • Система сборки и зависимостей Google Closure Library
  • Хранение данных на клиенте. DOM Storage и его аналоги.
  • 10 лучших функций на JavaScript
  • В памяти машины все вещественные числа.
    39 минут 8 секунд назад
  • Where to buy nembutal pentobarbital.
    4 часа 37 минут назад
  • Purchase original fryd extracts carts.
    4 часа 40 минут назад
  • Purchase original fryd extracts carts.
    4 часа 42 минуты назад
  • Great contribution! Also for the Snus.
    15 часов 12 минут назад
  • Я думаю ты прав Fumigaciones Precios
    17 часов 46 минут назад
  • I´m so happy I found this space with.
    17 часов 48 минут назад
  • Really it´s the best way to start Aire.
    17 часов 52 минуты назад
  • It´s the best answer in fact
    17 часов 56 минут назад
  • A great way to unwind in your leisure.
    18 часов 1 минута назад

Источник

Array.prototype.slice()

Метод slice() возвращает новый массив, содержащий копию части исходного массива.

Интерактивный пример

Синтаксис

Параметры

Индекс (счёт начинается с нуля), по которому начинать извлечение.

Если индекс отрицательный, begin указывает смещение от конца последовательности. Вызов slice(-2) извлечёт два последних элемента последовательности.

Если begin не определён, slice() начинает работать с индекса 0 .

Если begin больше длины последовательности вернётся пустой массив.

Индекс (счёт начинается с нуля), по которому заканчивать извлечение. Метод slice() извлекает элементы с индексом меньше end .

Вызов slice(1, 4) извлечёт элементы со второго по четвёртый (элементы по индексам 1, 2 и 3).

Если индекс отрицательный, end указывает смещение от конца последовательности. Вызов slice(2, -1) извлечёт из последовательности элементы начиная с третьего элемента с начала и заканчивая вторым с конца.

Если end опущен, slice() извлекает все элементы до конца последовательности ( arr.length ).

Возвращаемое значение

Новый массив, содержащий извлечённые элементы.

Описание

Метод slice() не изменяет исходный массив, а возвращает новую «одноуровневую» копию, содержащую копии элементов, вырезанных из исходного массива. Элементы исходного массива копируются в новый массив по следующим правилам:

  • Ссылки на объекты (но не фактические объекты): метод slice() копирует ссылки на объекты в новый массив. И оригинал, и новый массив ссылаются на один и тот же объект. То есть, если объект по ссылке будет изменён, изменения будут видны и в новом, и в исходном массивах.
  • Строки и числа (но не объекты String и Number ): метод slice() копирует значения строк и чисел в новый массив. Изменения строки или числа в одном массиве никак не затрагивает другой.

Если к любому массиву будет добавлен новый элемент, это никак не повлияет на другой массив.

Примеры

Пример: возврат части существующего массива

// Пример: наши хорошие друзья цитрусовые среди фруктов var fruits = ['Банан', 'Апельсин', 'Лимон', 'Яблоко', 'Манго']; var citrus = fruits.slice(1, 3); // citrus содержит ['Апельсин', 'Лимон'] 

Пример: использование метода slice()

В следующем примере метод slice() создаёт новый массив, newCar , из массива myCar . Оба содержат ссылку на объект myHonda . Когда цвет в объекте myHonda изменяется на багровый, оба массива замечают это изменение.

// Используя slice, создаём newCar из myCar. var myHonda =  color: 'красный', wheels: 4, engine:  cylinders: 4, size: 2.2 > >; var myCar = [myHonda, 2, 'в хорошем состоянии', 'приобретена в 1997']; var newCar = myCar.slice(0, 2); // Отображаем значения myCar, newCar и цвет myHonda // по ссылкам из обоих массивов. console.log('myCar = ' + myCar.toSource()); console.log('newCar = ' + newCar.toSource()); console.log('myCar[0].color = ' + myCar[0].color); console.log('newCar[0].color = ' + newCar[0].color); // Изменяем цвет myHonda. myHonda.color = 'багровый'; console.log('Новый цвет моей Honda - ' + myHonda.color); // Отображаем цвет myHonda по ссылкам из обоих массивов. console.log('myCar[0].color = ' + myCar[0].color); console.log('newCar[0].color = ' + newCar[0].color); 
= [color:'красный', wheels:4, engine:cylinders:4, size:2.2>>, 2, 'в хорошем состоянии', 'приобретена в 1997'] newCar = [color:'красный', wheels:4, engine:cylinders:4, size:2.2>>, 2] myCar[0].color = красный newCar[0].color = красный Новый цвет моей Honda - багровый myCar[0].color = багровый newCar[0].color = багровый 

Массивоподобные объекты

Метод slice() также может использоваться для преобразования массивоподобных объектов / коллекций в новый массив Array . Вам просто нужно привязать метод к объекту. Псевдомассив arguments (en-US) внутри функции как раз является примером «массивоподобного объекта».

function list()  return Array.prototype.slice.call(arguments, 0); > var list1 = list(1, 2, 3); // [1, 2, 3] 

Привязка может быть осуществлена посредством функции call() из прототипа функции Function.prototype (en-US), также запись может быть сокращена до [].slice.call(arguments) вместо использования Array.prototype.slice.call() . В любом случае, она может быть упрощена посредством использования функции bind() .

var unboundSlice = Array.prototype.slice; var slice = Function.prototype.call.bind(unboundSlice); function list()  return slice(arguments, 0); > var list1 = list(1, 2, 3); // [1, 2, 3] 

Совершенствование кросс-браузерного поведения

Хотя спецификация не требует от хост-объектов (например, объектов DOM) следовать поведению Mozilla при преобразовании с помощью Array.prototype.slice() и IE < 9 так не делает, версии IE, начиная с 9-й это умеют. «Прокладывание» позволяет добиться надёжного кросс-браузерного поведения. Пока другие современные браузеры будут поддерживать эту способность, что и делают в настоящее время IE, Mozilla, Chrome, Safari и Opera, разработчики, читая (поддерживающий DOM) код функции slice() , опирающийся на эту прокладку, не будут вводиться в заблуждение его семантикой; они могут смело полагаться на текущую семантику, являющуюся, видимо, де-факто стандартным поведением. (Прокладка также исправляет поведение IE, позволяя работать со вторым аргументом slice() , явно определённым как null / undefined , поскольку более ранние версии IE такое не позволяют, но все современные браузеры, в том числе IE >= 9, поддерживают данное поведение.)

/** * Прокладка для "исправления" отсутствия поддержки в IE < 9 применения slice * к хост-объектам вроде NamedNodeMap, NodeList и HTMLCollection * (технически, поскольку хост-объекты зависят от реализации, * по крайней мере, до ES2015, IE не обязан так работать). * Также работает для строк, исправляет поведение IE < 9, позволяя явно указывать undefined * вторым аргументом (как в Firefox), и предотвращает ошибки, возникающие при * вызове на других объектах DOM. */(function ()  'use strict'; var _slice = Array.prototype.slice; try  // Не может использоваться с элементами DOM в IE < 9_slice.call(document.documentElement); > catch (e)  // В IE < 9 кидается исключение// Функция будет работать для истинных массивов, массивоподобных объектов, // NamedNodeMap (атрибуты, сущности, примечания), // NodeList (например, getElementsByTagName), HTMLCollection (например, childNodes) // и не будет падать на других объектах DOM (как это происходит на элементах DOM в IE < 9)Array.prototype.slice = function(begin, end)  // IE < 9 будет недоволен аргументом end, равным undefinedend = (typeof end !== 'undefined') ? end : this.length; // Для родных объектов Array мы используем родную функцию slice if (Object.prototype.toString.call(this) === '[object Array]')  return _slice.call(this, begin, end); > // Массивоподобные объекты мы обрабатываем самостоятельно var i, cloned = [], size, len = this.length; // Обрабатываем отрицательное значение begin var start = begin || 0; start = (start >= 0) ? start: len + start; // Обрабатываем отрицательное значение end var upTo = (end) ? end : len; if (end  0)  upTo = len + end; > // Фактически ожидаемый размер среза size = upTo - start; if (size > 0)  cloned = new Array(size); if (this.charAt)  for (i = 0; i  size; i++)  cloned[i] = this.charAt(start + i); > > else  for (i = 0; i  size; i++)  cloned[i] = this[start + i]; > > > return cloned; >; > >()); 

Спецификации

Совместимость с браузерами

BCD tables only load in the browser

Смотрите также

Источник

Метод slice

Метод slice вырезает и возвращает указанную часть массива. Сам массив при этом не изменяется.

Первым параметром указывается номер элемента массива, с которого начинается вырезание, а вторым параметром — номер элемента, на котором закончится вырезание (при этом элемент с этим номером не включится в вырезанную часть). Второй параметр не является обязательным. Если его не указать — подмассив возьмется с указанного в первом параметре элемента до конца массива.

Он также может принимать отрицательные значения. В этом случае отсчет элемента, на котором закончится обрезание, начинается с конца массива. Последний элемент при этом будет иметь номер -1 .

Синтаксис

Пример

Давайте вырежем из массива элементы с нулевого по второй не включительно (второй не вырежется):

Результат выполнения кода:

Пример

Давайте вырежем с первого элемента до конца массива. Для этого второй параметр не задаем:

Результат выполнения кода:

Пример

Давайте вырежем элементы со второго по предпоследний ( -1 указывает на последний элемент и он не включится в извлеченную часть):

Результат выполнения кода:

Преимущество такого подхода в том, что вырезаться всегда будет часть массива, не включая последний элемент, независимо от размера массива.

Смотрите также

  • метод splice ,
    который также отрезает части массива, изменяя при этом сам массив
  • метод shift ,
    который удаляет первый элемент массива
  • метод pop ,
    который удаляет последний элемент массива

Источник

Читайте также:  What is document forms in javascript
Оцените статью