Какой смысл .slice (0) здесь? - PullRequest
       18

Какой смысл .slice (0) здесь?

61 голосов
/ 17 февраля 2011

Я изучал источник jQuery, когда нашел это (v1.5 строка 2295):

namespace = new RegExp("(^|\\.)" +
  jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)");

У меня вопрос, зачем использовать slice(0) здесь?

Ответы [ 5 ]

101 голосов
/ 17 февраля 2011

sort() изменяет массив, к которому он обращен - и не очень приятно разбираться с вещами, на которые может положиться другой код.

slice() всегда возвращает новый массив - массив, возвращаемый slice(0), идентичен вводу, что в основном означает, что это дешевый способ дублировать массив.

29 голосов
/ 17 февраля 2011

arr.slice(0) делает копию исходного массива, беря срез из элемента с индексом 0 до последнего элемента.

Он также используется для преобразования объектов, подобных массиву, в массивы.Например, DOM NodeList (возвращаемый несколькими методами DOM, такими как getElementsByTagName) не является массивом, но представляет собой массивоподобный объект с полем lengthи индексируется в JavaScript.Чтобы преобразовать его в массив, часто используют:

var anchorArray = [].slice.call(document.getElementsByTagName('a'), 0)
3 голосов
/ 03 марта 2018

slice (0) создает новый массив, идентичный исходному массиву.Много раз вы хотите сохранить исходный массив и создать новый.

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

Аналогичные вещи применимы и к строкам.

0 голосов
/ 30 марта 2017

В дополнение к тому, что @Anon сказал:

Метод slice() выбирает элементы, начинающиеся с заданного аргумента начала и заканчивающиеся, но не включающие, заданный аргумент конца.

Example1:

var fruits = ["Banana", "Orange", "Lemon", "Apple", "Mango"];
var citrus = fruits.slice(1, 3);

Результат цитрусовых будет:

Orange,Lemon

Example2:

var fruits = ["Banana", "Orange", "Lemon", "Apple", "Mango"];
var citrus = fruits.slice(-3, -1);

Результат цитрусовых будет:

Lemon,Apple

Дополнительную информацию можно найти здесь .

0 голосов
/ 17 февраля 2011

slice(0) позволяет вам вернуть массив существующего массива, на который вы ссылаетесь, в данном случае пространства имен.

...