Czy JavaScript ma metodę, taką jak „range ()”, do generowania zakresu w podanych granicach?
W roku PHP możesz to zrobić ...
range(1, 3);// Array(1, 2, 3)
range("A", "C");// Array("A", "B", "C")
Oznacza to, że istnieje funkcja, która pozwala uzyskać zakres liczb lub znaków, przekazując górną i dolną granicę.
Czy jest coś wbudowanego w JavaScript natywnie do tego? Jeśli nie, jak bym to zaimplementował?
Nie znaleziono powiązanych wyników
Zaproszony:
Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się
25 odpowiedzi
Anonimowy użytkownik
Potwierdzenie od:
Liczby
Natura iteracyjna
Iteracja
Jak działa
Funkcje typu As
lodash.jshttps://lodash.com/docs/4.16.4#range
funkcjonować
Starsze przeglądarki inne niż ES6 bez biblioteki:
<div class="snippet-code">
<div class="snippet" data-babel="true" data-console="true" data-hide="false" data-lang="js">
<pre class="snippet-code-js lang-js prettyprint-override">
console.log([...Array(5).keys()]);
Dzięki.
(Podziękowania ES6 dla Nielsa Petersona i innych komentatorów
)
Anonimowy użytkownik
Potwierdzenie od:
który działa w dzisiejszych czasach we wszystkim
https://developer.mozilla.org/ ... ility
z wyjątkiem IE:
Skrócona wersja:
Długa wersja:
co tworzy tablicę od 0 do 19 włącznie. Można go dalej zredukować do jednej z następujących form:
Możesz również określić dolną i górną granicę, na przykład:
Artykuł opisujący to bardziej szczegółowo:
http://www.2ality.com/2014/05/ ... .html
http://www.2ality.com/2014/05/ ... .html
Anonimowy użytkownik
Potwierdzenie od:
ES2015
)
A jeśli potrzebujesz funkcji z parametrem :
Anonimowy użytkownik
Potwierdzenie od:
Anonimowy użytkownik
Potwierdzenie od:
jsFiddle
http://jsfiddle.net/ZaZAZ/
.
Jeśli chcesz rozszerzyć własne typy, przypisz je do .
<div class="snippet-code snippet-currently-hidden">
<div class="snippet" data-babel="false" data-console="true" data-hide="true" data-lang="js">
<pre class="snippet-code-js lang-js prettyprint-override">
Anonimowy użytkownik
Potwierdzenie od:
Anonimowy użytkownik
Potwierdzenie od:
Anonimowy użytkownik
Potwierdzenie od:
OK,
w JavaScript nie mamy funkcji , takiej jak
PHP
więc musimy stworzyć funkcję, która jest całkiem prostą rzeczą, piszę dla ciebie kilka funkcji jednowierszowych i oddzielam je dla
liczby
i
alfabety
jak pokazano niżej:
dla numerów:
i nazwijmy to tak:
numberRange(5, 10);//[5, 6, 7, 8, 9]
dla
alfabety
:
i nazwijmy to tak:
alphabetRange('c', 'h');//["c", "d", "e", "f", "g"]
Anonimowy użytkownik
Potwierdzenie od:
Wygodna
Aby załatwić sprawę, uruchom poniższy fragment kodu
<div class="snippet-code">
<div class="snippet" data-babel="false" data-console="true" data-hide="false" data-lang="js">
<pre class="snippet-code-js lang-js prettyprint-override">
oto jak go używać
zakres (początek, koniec, krok = 1, przesunięcie = 0
);
range (5,10)// [5, 6, 7, 8, 9, 10]
range (10,5)// [10, 9, 8, 7, 6, 5]
range (10,2,2)// [10, 8, 6, 4, 2]
forward-exclusive (5,10,0, -1)// [6, 7, 8, 9] a nie 5,10 siebie
range (5,10,0,1)// [4, 5, 6, 7, 8, 9, 10, 11]
range (5,10,0, -2)// [7, 8]
range (10,0,2,2)// [12, 10, 8, 6, 4, 2, 0, -2]
mam nadzieję, że uznasz to za przydatne.
Oto jak to działa.
Zasadniczo najpierw obliczam długość wynikowej tablicy i tworzę tablicę wypełnioną zerami do tej długości, a następnie wypełniam ją wymaganymi wartościami
[0,0,0, ..]
odpowiadającą potrzebnej długości. Mapujemy to i zwracamy nową tablicę z wartościami, które chcemy, używającAnonimowy użytkownik
Potwierdzenie od:
Anonimowy użytkownik
Potwierdzenie od:
odpowiedź wielkiego Paolo Morettiego z generatorami ES6
https://stackoverflow.com/a/31357608/5437379
):
Lub, jeśli chcemy tylko iterowalne, to:
Anonimowy użytkownik
Potwierdzenie od:
operator propagacji harmonicznej
https://developer.mozilla.org/ ... rator
i funkcje strzałkowe:
var range = (start, end) => [...Array(end - start + 1)].map((_, i) => start + i);
Przykład:
Anonimowy użytkownik
Potwierdzenie od:
Sprawdź porównanie Zobacz ten test jsperf
http://jsperf.com/javascript-range-tests
różne sposoby wykonywania tych funkcji. Oczywiście nie jest to lista idealna ani wyczerpująca, ale powinna pomóc :)
Jest zwycięzca.
..
Technicznie nie jest najszybszy w Firefoksie, ale szalona różnica prędkości (imho) w Chrome to rekompensuje.
Interesujące jest również zobaczenie, o ile szybszy jest Chrome z tymi funkcjami tablicowymi niż Firefox.
Chrome jest co najmniej 4 lub 5 razy szybszy
.
Anonimowy użytkownik
Potwierdzenie od:
lodash
https://lodash.com/docs#range
lub
Undescore.js
http://underscorejs.org/#range :
Ponadto, jeśli chcesz tylko sekwencyjny zakres liczb całkowitych, możesz zrobić coś takiego:
W ES6 można zaimplementować z
generatory
https://developer.mozilla.org/ ... yield
:
Ta implementacja oszczędza pamięć podczas iteracji po dużych sekwencjach, ponieważ nie musi materializować wszystkich wartości w tablicy:
Anonimowy użytkownik
Potwierdzenie od:
Jeśli chcesz dwukrotnie sprawdzić, ostatecznym zasobem jest
to jest standard
http://www.ecma-international. ... 2.htm
ECMA-262 .
Anonimowy użytkownik
Potwierdzenie od:
Gdzie 40 to (koniec to początek), a 10 to początek. Powinien wrócić
[10, 11, ..., 50
]
Anonimowy użytkownik
Potwierdzenie od:
krótki
funkcja do tego. Rekursja przyszła na ratunek!
Generalnie działa wolno na dużych odległościach, ale na szczęście komputery kwantowe są tuż za rogiem.
Dodatkową zaletą jest to, że jest to mylące. Ponieważ wszyscy wiemy, jak ważne jest, aby ukryć nasz kod przed wzrokiem ciekawskich.
Aby naprawdę i całkowicie zmylić funkcję, wykonaj następujące czynności:
Anonimowy użytkownik
Potwierdzenie od:
Zachowuje się podobnie do zakresu Pythona:
Anonimowy użytkownik
Potwierdzenie od:
:
Anonimowy użytkownik
Potwierdzenie od:
>
Pytasz tylko o górne i dolne granice.
Tutaj również tworzymy jeden z krokiem.
Możesz łatwo utworzyć funkcję generatora , która może działać jako iterator. Oznacza to, że nie musisz wstępnie generować całej tablicy.
Teraz możesz utworzyć coś, co wstępnie generuje tablicę z iteratora i zwraca listę. Jest to przydatne w przypadku funkcji, które akceptują tablice. W tym celu możemy użyć
Teraz możesz łatwo wygenerować tablicę statyczną,
Ale gdy coś potrzebuje iteratora (lub daje ci możliwość użycia iteratora), możesz łatwo go również utworzyć.
specjalna notatka
>
Anonimowy użytkownik
Potwierdzenie od:
PHP
i symulowanie from
Python
.
Anonimowy użytkownik
Potwierdzenie od:
Oczywiście to nie zadziała dla tablic alfabetycznych.
Anonimowy użytkownik
Potwierdzenie od:
generatory harmonii
http://wiki.ecmascript.org/dok ... ators
,
obsługiwane przez wszystkie przeglądarki oprócz IE11
http://kangax.github.io/es5-compat-table/es6/
:
Próbki
>
brać
Przykład 1.
zajmuje tylko tyle, ile może
zwroty
[100, 105, 110, 115, 120]
Przykład 2.
jest opcjonalny
zwroty
[100, 105, 110, 115, 120, 125, 130, 135, 140, 145]
takeAll
Przykład 3.
opcjonalnie
zwroty
[0, 1, 2, 3, 4, 5]
Przykład 4.
zwroty
[0, 100, 200, 300, 400, 500]
Przykład 5.
zwroty
["z", "y", "x", "w", "v", "u", "t", "s", "r", "q", "p", "o", "n", "m", "l", "k", "j", "i", "h", "g", "f", "e", "d", "c", "b", "a"]
Anonimowy użytkownik
Potwierdzenie od:
większy zasięg dzięki funkcji generatora.
Mam nadzieję, że to będzie pomocne.
Anonimowy użytkownik
Potwierdzenie od:
włącznie:
(s,f)=>[...Array(f-s+1)].map((e,i)=>i+s)
numery włącznie:
(s,f)=>[...Array(f-s)].map((e,i)=>i+s)