Mam szereg obiektów Javascript, które chciałbym współdziałać w kolejności zgodnej z rzeczywistością, która jest zawsze dodatnią liczbą całkowitą z opcjonalną pojedynczą literą na koniec. Szukam rozwiązanie, które działa w co najmniej Firefox 3 i Internet Explorer 8. najbliżej Doszedłem do takiej funkcji sortowania jest następująca:JavaScript w IE8: jak sortować tablicę obiektów według właściwości alfanumerycznych
var arrayOfObjects = [{id: '1A', name: 'bar', size: 'big'}, {id: '1C', name: 'bar', size: 'small'}, {id: '1', name: 'foo', size: 'big'}, {id: '1F', name: 'bar', size: 'big'}, {id: '1E', name: 'bar', size: 'big'}, {id: '1B', name: 'bar', size: 'small'}, {id: '1D', name: 'bar', size: 'big'}, {id: '1G', name: 'foo', size: 'small'}, {id: '3', name: 'foo', size: 'small'}, {id: '23', name: 'foo', size: 'small'}, {id: '2', name: 'foo', size: 'small'}, {id: '1010', name: 'foo', size: 'small'}, {id: '23C', name: 'foo', size: 'small'}, {id: '15', name: 'foo', size: 'small'}]
arrayOfObjects.sort(function(a, b){
return (a.id < b.id ? -1 : a.id == b.id ? 0 : 1);
});
Po tak sortowane, drukując arrayOfObjects daje :
1, bla, duże
1010, bla, małe
15, bla, małe
1A, bar, duży
1B, bar, mały
1C, bar, mały
1D Pasek, duże
1E, bar, duży
1F, bar, duży
1G, bla, małe
2, bla, małe
23, bla, małe
23C, bla, małe
3 foo , mały
jednak chciałbym arrayOfObjects wydrukować w kolejności poniżej:
1, foo, duży
1A, bar, duży
1B , Bar, mały
1C, bar, mały
1D, bar, duży
1E, bar, duży
1F, bar, duży
1G, bla, małe
2, bla, małe
3 bla, małe
15, bla, małe
23, bla, małe
23C, bla, małe
1010, bla, małe
Biorąc pod uwagę, w jaki sposób mogę rozwiązać ab ove funkcja, aby obiekty sortować według numeru jako klucz podstawowy i literę jako klucz dodatkowy? Z góry dziękuję za pomoc.
regex dosłowny nie dodawać żadnych kosztów dla każdej iteracji. Lepiej pozbyć się funkcji zewnętrznej samozachowawczej i zadeklarować splitter wewnątrz wewnętrznej funkcji. –
Poza tym wspaniała odpowiedź. Jest on znacznie bardziej zwięzły niż odpowiedź, którą przygotowywałam do zaoferowania :) –
Mam coś wspólnego z powtarzaniem wyrażeń regularnych - to nie tyle dla wydajności, ile dla utrzymania. Być może raz na sto prób, za pierwszym razem otrzymam wyrażenie regularne, więc chcę zminimalizować liczbę powtórzeń. Oczywiście mogłem po prostu wpisać to jako 'var' w ciele funkcji; Nie myślałem o tym zbyt wiele. – Pointy