2012-03-26 14 views
2

Ich habe Objekt JSONIE 7/8 Javascript Sortierfehler "Anzahl Expected"

var x=[{@Name:'test 1',@Sort:'1',@Status:'yes'}, 
     {@Name:'test 2',@Sort:'5',@Status:'yes'}, 
     {@Name:'test 3',@Sort:'4',@Status:'no'}, 
     {@Name:'test 5',@Sort:'2',@Status:'no'}] 

Ich versuche, die obj von @ Sortieren zu sortieren, @ Name und @Status.

var orderBy="@Sort"; 
    x.sort(_sortObj(orderBy)); 

    function _sortObj(orderBy){ 
     return function(a,b){ 
      return (a[orderBy]<b[orderBy])?1:0....etc 
     } 
    } 

Es funktioniert in Firefox und Chrome ...

Aber wirft Fehler in IE 7/8 als "Zahl erwartet" on line

x.sort(_sortObj(orderBy)); 

Ich bin nicht sicher, was ist los und es wird toll sein, wenn jemand das richtig macht.

+0

Duplikat http://stackoverflow.com/questions/1069666/sorting-javascript-object-by-property-value – jbabey

+0

@jbabey ich es nicht glaube, ist unbedingt ein Duplikat. Der Algorithmus ist korrekt, aber im IE wird eine Ausnahme ausgelöst. – Brandan

Antwort

1

Das ist kein JSON-Objekt. Die Eigenschaftsnamen und -werte MÜSSEN in "doppelte Anführungszeichen" eingeschlossen sein.

Dies ist wahrscheinlich der Grund für den Fehler in älteren IE, es versteht nicht die @ da ist.

+0

Es ist eigentlich eine 3rd Party API ... ich weiß nicht, warum diejenigen mit @ aber ich muss mit ihm gehen – Nithish

+0

können Sie führen, um durch diese doppelte Anführungszeichen zu bekommen – Nithish

1

Zusätzlich zu Kolinks Antwort, IE möglicherweise nicht zwingen Ihre Zeichenfolge-Y-Zahlen in tatsächliche numerische Objekte für den Vergleich <. Sie können durch 1, dass Zwang, sich durch Multiplikation durchführen:

return (a[orderBy]*1 < b[orderBy]*1) ? 1 : 0; 
+0

Immer noch gleichen Fehler ... kolink war richtig es passieren bcoz der fehlenden Doppel qoutes ... – Nithish

+0

Wie erhalten Sie dieses JSON von Ihrer API? Als eine Schnur? Wenn dies der Fall ist, können Sie wahrscheinlich die fehlerhaften Attribute durch einen regulären Ausdruck ersetzen. – Brandan

0

ich bin Das gleiche Problem mit Ihnen zu haben, und es scheint, dass es ein IE-Problem ist, können Sie vielleicht versuchen:

var orderBy="@Sort"; 
x.sort(_sortObj(orderBy)); 

function _sortObj(orderBy){ 
    return function(a,b){ 
     var aa = a,bb = b; 
     return (aa[orderBy]<bb[orderBy])?1:0....etc 
    } 
} 

Sie etwas Hilfe von hier finden: http://www.zachleat.com/web/array-sort/comment-page-1/#comment-3941