IE 7/8 ошибка сортировки JavaScript "Ожидаемое число" - PullRequest
2 голосов
/ 26 марта 2012

У меня есть объект JSON

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'}]

Я пытаюсь отсортировать объект по @ Sort, @ Name и @ Status.

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

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

В Firefox работает нормальнои Chrome ...

но выдает ошибку в IE 7/8 как "ожидаемое число" в строке

  x.sort(_sortObj(orderBy));

Я не уверен, что происходит, и будет здорово, если кто-нибудьразобраться в этом правильно.

Ответы [ 4 ]

1 голос
/ 26 марта 2012

В дополнение к ответу Колинка, IE может не приводить ваши строковые числа в реальные числовые объекты для сравнения <.Вы можете выполнить это принуждение самостоятельно, умножив на 1:

return (a[orderBy]*1 < b[orderBy]*1) ? 1 : 0;
1 голос
/ 26 марта 2012

Это не объект JSON.Имена и значения свойств ДОЛЖНЫ быть заключены в «двойные кавычки».

Это, вероятно, причина ошибки в более старом IE, он не понимает, что @ находится там.

0 голосов
/ 17 декабря 2012

У меня та же проблема с вами, и похоже, что это проблема IE, может быть, вы можете попробовать это:

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
    }
}

Вы можете найти помощь здесь: http://www.zachleat.com/web/array-sort/comment-page-1/#comment-3941

0 голосов
/ 12 апреля 2012

Я решил эту проблему, используя плагин сортировки ниже,

http://www.thomasfrank.se/downloadableJS/objSort.js

Спасибо, ребята, за помощь мне

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...