1

其他浏览器工作正常,但在 IE 中,当使用以下代码时,我得到 Number Expected,它在排序函数上运行到一个空对象。 http://jsfiddle.net/R3ndd/2/

function list_response(jsonData) {
"use strict";
var lists = document.getElementById("lists"), anchors =     document.getElementById("anchors"), jItems = jsonData.items;
var results = [], anks = [], vList, pListName, item, videoItem;

var i, j, jLen, iLen = jItems.length;
for (var i = 0; i < iLen; i++) {
    if(jItems[i] != null ){
    jItems[i].nameLower = jItems[i].name.toLowerCase();
    }
}

jItems.sort(function (a, b) {
    if(a != null && b != null){
    return a.nameLower.localeCompare(b.nameLower);
    }
});

有什么建议么?谢谢!

我的解决方案

我决定使用以下方法从 json 中删除空对象(有效):

var y;
for (var x in jItems) {
    if ( Object.prototype.hasOwnProperty.call(jItems,x)) {
        y = jItems[x];
        if (y==="null" || y===null || y==="" || typeof y === "undefined") {
            delete jItems[x];
        }

    }
}
4

1 回答 1

2

不知道为什么 IE 会那样做,但麻烦我们这些好人是一种习惯 :)。好吧,我认为这将是更好的方法。

/* NOT NEEDED.
for (var i = 0; i < iLen; i++) {
    if(jItems[i] != null ){
    jItems[i].nameLower = jItems[i].name.toLowerCase();
    }
}*/

jItems.sort(function (a, b) {
    return a && b ? a.toLowerCase().localeCompare(b.toLowerCase()) : 0;
});

更新:

好吧,我想我知道 IE 的问题在哪里。对不起MS,这次IE没有任何问题。发生的情况是,如果其中一个或是a// (或任何虚假值),您的回调没有返回任何值。这解释了“预期数量”错误。但我已经处理好了,所以我的回答可能会奏效。:)bnull''false

于 2012-06-08T17:13:32.510 回答