IE 7/8 javascript排序错误“;应为“数字”;

IE 7/8 javascript sorting error "Number Expected"

本文关键字:应为 数字 错误 排序 javascript IE      更新时间:2023-09-26

我有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对obj进行排序。

    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));

我不确定发生了什么,如果有人能妥善解决这件事,那就太好了。

这不是一个JSON对象。属性名称和值必须用"双引号"括起来。

这可能是旧IE中出现错误的原因,它不理解其中的@

除了Kolink的答案之外,IE可能不会为了<比较而将字符串数字强制转换为实际的数字对象。你可以通过乘以1:自己来执行强制

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

我使用下面的排序插件解决了这个问题

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

感谢大家在方面帮助我

我和你有同样的问题,似乎是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