2016-05-12 10 views
5

Zauważyłem, że orderBy w Chrome nie sortuje tak jak w innych przeglądarkach.OrderBy sortuje inaczej w Chrome niż inne przeglądarki.

Piszę o projekcie w Angular 1.3.

Chrome Sortowanie: Chrome

IE 10 Sortowanie: enter image description here

Nie ma specjalnego logika dotyczące konkretnych przeglądarek i obie tablice są dokładnie takie same.

Predykat jest jednoznacznie zdefiniowane:

$scope.predicate = 'style'; 
$scope.reverse = true; 

Moja ng-repeat wygląda następująco:

<tr ng-repeat="line in model.resultList | orderBy:predicate:reverse"> 

Nic specjalnego lub inny z mojego kodu. "Rozmiary" to jednak ciągi znaków (np. Rozmiar: "8-", ..., rozmiar: "6", ...). Dlaczego to sortowanie jest zupełnie inne w Chrome niż w każdej innej przeglądarce?

Wszystkie moje wyniki są posortowane od końca w grupach stylów #, a następnie rosnących rozmiarów. Po ustawieniu sortowania podstawowego na Angular, w tym przypadku Style, Chrome miesza już posortowane rozmiary. Proszę zobaczyć Plnk poniżej (otwarte w Chrome i IE/Firefox, aby zobaczyć różnicę)

http://plnkr.co/edit/6TO8pZZ8jZ8Tytw6wHpQ?p=preview

+1

Co to są właściwości stylu? Czy potrafisz zapewnić skrzypce demonstracji? Nie jest jasne, co to jest posortowana własność. – Andrey

+0

Dzieje się tak dlatego, że chrome "jest szybkie", więc nie przejmuje się sortowaniem, zamiast tego wykonuje pewne tasowanie, aby wiedzieć, że identyfikator nie całkowicie zignorował twoje polecenie. –

+0

Nie można repro w tym [przykład] (https://plnkr.co/edit/ptx9SSTbOKCA3kTj58Af?p=preview) –

Odpowiedz

4

nic złego. Ponieważ sortujesz według innego pola - rozmiar może być w dowolny sposób przetasowany. orderBy polega na funkcji sortowania buit-in przeglądarki (source). Implementacje przeglądarki mogą być inne. Sortowanie nie powinno być stabilne (MDN, ES2015 Standard section).

Jeśli chcesz uzyskać spójne zachowanie, użyj sortowania według wielu pól. Takich jak

orderBy:[predicate, 'size']:reverse 
+1

Jako adition i po twoim wyjaśnieniu, 'sort()' da nieoczekiwane wyniki nawet w tej samej przeglądarce. –

+1

@Andrey Dziękuję bardzo za pomoc! – developthewebz

Powiązane problemy