我有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));
我不确定发生了什么事,如果有人正确解决这个问题会很好。
答案 0 :(得分:1)
这不是JSON对象。属性名称和值必须用“双引号”括起来。
这可能是旧IE中出错的原因,它不理解@
在那里。
答案 1 :(得分:1)
除了Kolink的回答,IE可能不会将你的字符串数字强制转换为<
比较的实际数字对象。你可以通过乘以1来实现这种强制:
return (a[orderBy]*1 < b[orderBy]*1) ? 1 : 0;
答案 2 :(得分:0)
答案 3 :(得分:0)
我和你有同样的问题,看起来这是一个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