Ho una serie di oggetti Javascript che mi piacerebbe ordinare in modo incrociato da una proprietà che è sempre un numero intero positivo con una singola lettera opzionale a fine. Sto cercando una soluzione che funziona in almeno Firefox 3 e Internet Explorer 8. Il più vicino Sono venuto a tale funzione di ordinamento è la seguente:Javascript in IE8: come ordinare una matrice di oggetti con proprietà alfanumeriche
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);
});
Dopo essere stato così ordinato, stampare arrayOfObjects dà :
1, foo, grande
1010, foo, piccolo
15, foo, piccolo
1A, bar, grande
1B, bar, piccolo
1C, bar, piccolo
1D, bar, grande
1E, bar, grande
1F, bar, grande
1G, foo, piccolo
2, foo, piccolo
23, foo, piccolo
23C, foo, piccolo
3, foo , piccolo
Tuttavia, desidero arrayOfObjects stampare nel seguente ordine:
1, foo, grande
1A, bar, grande
1B , Bar, piccolo
1C, bar, piccolo
1D, bar, grande
1E, bar, grande
1F, bar, grande
1G, foo, piccolo
2, foo, piccolo
3, foo, piccolo
15, foo, piccolo
23, foo, piccolo
23C, foo, piccolo
1010, foo, piccolo
Dato che, come potrei risolvere il ab ove funzione in modo che gli oggetti vengano ordinati per numero come chiave primaria e lettera come chiave secondaria? Grazie in anticipo per qualsiasi aiuto.
Il letterale espressione regolare non aggiunge alcun costo per ogni iterazione. Faresti meglio a sbarazzarti della funzione di autoesecuzione esterna e dichiarare lo splitter all'interno della funzione interna. –
Oltre a ciò, ottima risposta. È significativamente più conciso della risposta che stavo preparando ad offrire :) –
Ho una cosa riguardo la ripetizione delle espressioni regex: non è tanto per le prestazioni quanto per la manutenzione. Forse una volta su cento ci proverò una regex al primo tentativo, quindi voglio ridurre al minimo il numero di volte che lo ripeto. Ovviamente avrei potuto semplicemente inserirlo come 'var' nel corpo della funzione; Non ci stavo pensando molto. – Pointy