Дополнительно
Есть ли в JavaScript метод типа "range()" для генерации диапазона в заданных границах?
В PHP вы можете делать...
range(1, 3); // Array(1, 2, 3)
range("A", "C"); // Array("A", "B", "C")
То есть, существует функция, которая позволяет получить диапазон чисел или символов, передавая верхнюю и нижнюю границы.
Есть ли что-нибудь встроенное в JavaScript для этого? Если нет, то как мне это реализовать?
734
20
Числа
Итерационный характер
Ите
Функции
Как типизированные функции
lodash.js
_.диапазон()
функцияСтарые номера браузеры на ES6 без библиотеки:
в
в
Спасибо.
(Кредит на ES6 Нильса petersohn и в других комментариях)
Для чисел можно использовать массив ЕС6
.от()
, который работает все эти дни, кроме IE:Сокращенный вариант:
Более длинная версия:
которая создает массив от 0 до 19 включительно. Это может быть сокращено к одной из этих форм:
Нижняя и верхняя границы можно задать, например:
Статья, описывающая это более подробно: http://www.2ality.com/2014/05/es6-array-methods.html
Моя новая любимая форма (ES2015)
И если вам нужна функция с
шагом
парам:Здесь's Мои 2 цента:
Он работает для символов и цифр, переходя вперед или назад с дополнительным шагом.
Простая функция диапазон:
Для включения BitInt тип данных некоторые проверки могут быть включены, гарантируя, что все переменные имеют одинаковые
typeof на старт
:ОК, в JavaScript, мы не'т у `диапазон () функция, как РНР, поэтому нам нужно создать функцию, которая является довольно легким делом, я пишу пару однострочных функций для вас и разделить их на числа и алфавиты как ниже:
по числа:
и назвали это так:
для алфавиты:
и назвали это так:
Удобный функция, чтобы сделать трюк, выполнить фрагмент кода ниже
в
в
вот как использовать его
диапазон (начало, конец, Шаг=1, смещение=0);
(10,5) // [10, 9, 8, 7, 6, 5]
шаг назадспектр(10,2,2) // [10, 8, 6, 4, 2]
надеемся, что вы найдете ее полезной.
И вот как это работает.
В основном я'м сначала вычисляется длина результирующего массива и создать нулевой заполненный массив до той длины, затем заполнить его с необходимыми значениями
(Шаг || 1)
=> и других, как это означает использовать значениешаг
и если это не было предусмотрено использовать1
вместо(математика.АБС(конец - начало) + ((офсет|| 0) * 2)) / (Шаг || 1) + 1)
, чтобы положить его проще (разница* смещение в обоих направлениях/шаг)новый массив(длина).заполнения(0);
посмотреть здесь[0,0,0,..]
длины мы хотим. Мы карту за это и возвращает новый массив со значениями, нам нужно с помощью массива.карта(функция() {})`ВАР направлении = начало < конец ? 1 : 0;
очевидно, что если "старт" не меньше чем "конец", мы должны двигаться назад. Я имею в виду от 0 до 5 или наоборотstartingPoint
+шага
*индекс
дает нам значение нужноИспользуя гармонии распространения оператора и стрелочные функции:
Пример:
Стандартный Javascript не имеет встроенной функции для генерации диапазонов. Несколько фреймворков javascript добавляют поддержку таких функций, или, как отметили другие, вы всегда можете создать свою собственную.
Если вы хотите перепроверить, то окончательным ресурсом является ECMA-262 Standard.
Сделал некоторые исследования на различные функции интервала. Проверка на см. Этот тест jsperf сравнения различные способы выполнения этих функций. Конечно, не идеальный или полный перечень, но должно помочь :)
Победитель...
Технически не самый быстрый на Firefox, но сумасшедшая разница в скорости (имхо) на Хром составляет для него.
Также Интересное наблюдение: насколько быстрее хрома с этими функциями массива, чем Firefox. Chrome-это, по крайней мере 4 или 5 раз быстрее.
Вы можете использовать лодашь или Undescore.js
диапазон
:Кроме того, если вам нужны только ряд последовательных чисел, вы можете сделать что-то вроде:
В ЕС6
спектр
может быть реализован с генераторы:Эта реализация позволяет экономить память при переборе больших последовательностей, потому что он не'т иметь, чтобы материализовать все значения в массив:
Еще один вариант использование генераторов на ES6 ( см. великий Паоло Моретти ответа с генераторами на ES6 ):
Интересная задача будет состоять в том, чтобы написать короткие функция для этого. Рекурсия к спасению!
Имеет тенденцию быть медленным на больших диапазонах, но, к счастью, квантовые компьютеры не за горами.
Дополнительным бонусом является то, что она'ы путанными. Потому что мы все знаем, как важно, чтобы прятать код от посторонних глаз.
Чтобы совершенно скрыть функцию, сделайте следующее:
Я бы что-то вроде этого код:
Он ведет себя аналогично серии питон:
Довольно минималистичный реализации, которые в значительной степени работают на ES6 может быть создан следующим образом, обращая особое внимание на массив
.от()
статический метод:Хотя это не из РНР, но имитация "колеблются" от питон.
диапазон(начало,конец,шаг)
: с ЕС6 итераторыВы только попросите верхней и нижней границ. Здесь мы зделаем тоже шаг.
Вы можете легко создавать диапазона (функция генератор), который может функционировать в качестве итератора. Это означает, что вы Дон'т придется предварительно генерировать весь массив.
Теперь вы можете создать что-то, что предварительно генерирует массив из итератора и возвращает список. Это полезно для функции, которые принимают массив. Для этого можно использовать массив.из()`
Теперь вы можете легко создавать статический массив,
Но когда что-то желания итератор (или дает возможность использовать итератор) вы можете легко создать.
Особые Примечания
спектр
как Лодашь