To trochę dziwne, że klasa JavaScript Array nie oferuje ostatniej metody pobierania ostatniego elementu tablicy. Wiem, że rozwiązanie jest proste (Ar [Ar.length-1]), ale nadal jest to zbyt często używane.
Jakieś poważne powody, dla których nie jest to jeszcze włączone?
javascript
Nikhil Garg
źródło
źródło
item= array.pop();
.array[array.length-1]
jest znacznie szybsza niż inne.(Ar[Ar.length-1])
osiąga dla mnie 20x lepszą wydajność.Odpowiedzi:
Ponieważ JavaScript zmienia się bardzo powoli. A to dlatego, że ludzie powoli aktualizują przeglądarki.
Wiele bibliotek JavaScript implementuje własne
last()
funkcje. Użyj jednego!źródło
last()
funkcję. Pytanie dotyczyło natury samego rozwoju podstawowego języka Javascript.Możesz zrobić coś takiego:
Pokaż fragment kodu
Ilość metod pomocniczych, które można dodać do języka, jest nieskończona. Przypuszczam, że po prostu nie rozważali dodania tego.
źródło
Łatwo jest samemu go zdefiniować. To jest siła JavaScript.
Może to jednak powodować problemy z kodem innej firmy, który (nieprawidłowo) używa
for..in
pętli do iteracji po tablicach.Jeśli jednak nie jesteś związany z problemami z obsługą przeglądarek , użycie nowej składni ES5 do definiowania właściwości może rozwiązać ten problem, sprawiając, że funkcja nie jest wyliczalna, na przykład:
źródło
for..in
problemu. Jasne, nie jesteśmy jeszcze tam z szeroką implementacją ES5, ale wystarczy wiedzieć teraz, ponieważ przeglądarki szybko to dogrywają, w tym IE9.this.length - 1
wartość-1
, która, ponieważ jest liczbą ujemną, jest traktowana jako właściwość tablicy, a nie indeks elementu.i = [].concat(loves).pop(); //corn
ikona kota uwielbia popcorn
źródło
Inną opcją, zwłaszcza jeśli używasz już UnderscoreJS, byłoby:
źródło
źródło
null
czyundefined
?this[l-1]
dałoby ciundefined
normalny dostęp do nieistniejących właściwości. Osobiście wolałbym, żeby JS rzucił wyjątek, zamiast wracaćundefined
, ale JS woli zamiatać błędy pod dywan.Przyszedłem tutaj, szukając odpowiedzi na to pytanie. Odpowiedź na wycinek jest prawdopodobnie najlepsza, ale zdecydowałem się na „ostatnią” funkcję tylko po to, aby poćwiczyć rozszerzanie prototypów, więc pomyślałem, że będę mógł się nią podzielić. Ma dodatkową zaletę w stosunku do niektórych innych, ponieważ umożliwia opcjonalne liczenie wstecz w tablicy i wyciąganie, powiedzmy, elementu przedostatniego lub trzeciego do ostatniego. Jeśli nie określisz liczby, po prostu domyślnie 1 i wyciągnie ostatni element.
źródło
last(4)
lublast(9)
tracisz znaczenie nazwy funkcji, tj;last
Oto kolejny prostszy sposób na pokrojenie ostatnich elementów
lastObj
jest teraz["barfoo"]
.Python robi to w ten sam sposób, a kiedy próbowałem użyć JS, wyszło. Domyślam się, że manipulacja napisami w językach skryptowych działa w ten sam sposób.
Podobnie, jeśli chcesz, aby ostatnie dwa obiekty w tablicy,
da ci
["foobar", "barfoo"]
i tak dalej.źródło
lastObj
będzie zawierać["barfoo"]
. W każdym razie, dlaczego miałbym to zrobićArray.prototype.slice.call(tags
zamiast tylkotags.slice
?pop()
metoda wyrzuci ostatnią wartość. Problem polega jednak na tym, że utracisz ostatnią wartość w tablicyźródło
Tak, lub po prostu:
jeśli chcesz mieć wartość, a nie nową listę.
źródło