Oznacza to, że lepiej byłoby użyć jakiejś struktury danych drzewiastych lub pominiętych list, jeśli muszę wywoływać tę funkcję dużo dla wstawiania pojedynczych macierzy?JavaScript: Jakie jest algorytmiczne działanie "splice"?
Odpowiedz
Możesz rozważyć, czy zamiast tego chcesz użyć prostej mapy; wszystkie obiekty JavaScript (łącznie z instancjami Array
) są mapami, więc implementacja powinna być (proszę zauważyć, że nie mówię "nie") ma rozsądny algorytm mieszający wydajność.
Oprócz tego wydajność splice
będzie się różnić część między implementacjami (np. Dostawców). Jest to jeden z powodów, dla których "nie optymalizuj przedwcześnie" jest jeszcze bardziej odpowiednią radą dla aplikacji JavaScript, które będą działać w wielu implementacjach dostawców (na przykład aplikacje internetowe), nawet w przypadku normalnego programowania. Dbaj o to, aby kod był dobrze zmodularyzowany i rozwiązywał problemy z wydajnością, jeśli wystąpią.
Problem z mapą nie wydaje mi się, żebym mógł ją powtórzyć w uporządkowanej kolejności ... – Hamster
@Hamster: Możesz, ale tylko znajdując wszystkie klucze, sortując je, a następnie przeglądając tę listę. Jeśli musisz to zrobić dużo, to prawdopodobnie lepiej Ci się z 'Tablicą' (która w JavaScript jest przecież po prostu mapą o zdefiniowanej kolejności i magiczną właściwością' length'). –
@ T.J.Crowder Co się stanie, jeśli będę musiał wstawiać element w określonym indeksie między już istniejącymi elementami (tj. Utrzymywać je i porządkować indeksy) często, a są tysiące elementów? Wiem, że mogę to zrobić za pomocą 'splice', ale jest' Array' z 'splice' odpowiednią strukturą danych dla takiego zadania? Jeśli nie, to jaka inna struktura danych JS może nadawać się do tego? – tonix
Oto dobra zasada, oparta na testach przeprowadzonych w Chrome, Safari i Firefox: Łączenie pojedynczej wartości w środek tablicy to w przybliżeniu o połowę szybsza jako przesuwanie/przesuwanie wartości do jednego z końców szyk. (Uwaga: Tylko testowany na tablicy wielkości 10,000.)
http://jsperf.com/splicing-a-single-value
To dość szybko. Jest więc mało prawdopodobne, że musisz zająć się wdrażaniem kolejnej struktury danych w celu wyciśnięcia większej wydajności.
Aktualizacja: Jak eBusiness zwraca uwagę w komentarzach poniżej, badanie wykonuje kosztowną operację kopiowania wraz z każdym splice
, push
i shift
, co oznacza, że nie docenia różnicy w wydajności. Oto poprawiony test, który zapobiega kopiowaniu tablicy, więc powinno być znacznie bardziej precyzyjne: http://jsperf.com/splicing-a-single-value/19
W rzeczywistości zależy to całkowicie od długości tablicy. Jeśli zmienisz tablicę na 100 000 elementów, to łączenie wartości w środku jest o 95% wolniejsze niż dodanie wartości na końcu, jak zmierzono w teście jsperf. To dlatego, że wstawienie w środku to O (n) w rozmiarze tablicy, podczas gdy wstawienie na końcu może być O (1). – Geoff
-1 Ten test jsperf jest zanieczyszczony przez skopiowanie tablicy, w większości chodzi o pomiar czasu potrzebnego na utworzenie całej nowej tablicy 10000 elementów. – aaaaaaaaaaaa
@eBusiness Proszę opracować swoje roszczenie. Gdzie w testach tablica jest kopiowana? –
Move pojedyncza wartość
// \t tmp = arr[1][i];
// \t arr[1].splice(i, 1); \t // splice is slow in FF
// \t arr[1].splice(end0_1, 0, tmp);
\t tmp = arr[1][i];
\t ii = i;
\t while (ii<end0_1)
\t \t {
\t \t arr[1][ii] = arr[1][++ii];
cycles++;
\t \t }
\t arr[1][end0_1] = tmp;
- 1. Skąd wiadomo, jakie jest główne działanie związane z uruchomieniem?
- 2. JavaScript funkcja splice wewnątrz pętli foreach zmniejsza indeks
- 3. Jakie jest wytłumaczenie dziwnego wyrażenia javascript?
- 4. Splice na kolekcjach
- 5. js. splice zwraca usunięty element?
- 6. Jakie ulepszenia sprzętowe powinniśmy wprowadzić, aby przyspieszyć działanie naszego komputera?
- 7. Jakie metody są blokowane w JavaScript?
- 8. algorytmiczne rzeszoto: sekwencja o swobodnym dostępie, insercji i remotion
- 9. Jakie jest najbardziej eleganckie wyrażenie (działanie) lambda, które nic nie robi?
- 10. Jakie jest znaczenie onsubmit = "return false"? (JavaScript, jQuery)
- 11. JavaScript DATA i C# data - jakie jest najlepsze rozwiązanie?
- 12. Git Hook: Podejmij działanie, gdy oddział jest zaawansowany
- 13. Nieprawidłowy argument podczas wywoływania linux splice()
- 14. Dodanie obiektu do tablicy obiektów z splice
- 15. Jakie jest znaczenie CTOR?
- 16. Jakie jest znaczenie transakcji?
- 17. Jakie jest znaczenie operatora &?
- 18. Jakie jest znaczenie! #: 3?
- 19. Jakie jest znaczenie operatora || =
- 20. Jakie jest zachowanie __faststorefence?
- 21. Jakie jest znaczenie identyfikatora?
- 22. jakie jest znaczenie CV_INSTRUMENT_REGION()?
- 23. Jakie jest znaczenie System.CLSCompliantAttribute?
- 24. Jakie są konsekwencje tego fragmentu javascript?
- 25. Jakie są ograniczenia kompilacji dart do javascript?
- 26. Jakie narzędzie javascript min używa jquery?
- 27. Jakie struktury danych drzewa javascript są dostępne?
- 28. Jakie są popularne skróty/triki JavaScript?
- 29. Działanie formularza HTML i problemy z onsubmitem
- 30. Jakie jest minimalne opóźnienie wykrywalne przez człowieka?
testowy to! To najlepszy sposób, aby odpowiedzieć na to pytanie ... – Harmen
Jaki jest dobry sposób na sprawdzenie tego? – Hamster
Jeśli tablice JavaScript są w rzeczywistości tablicami, jest to O (n). – Gumbo