1

他のブラウザは正常に動作しますが、IE では次のコードを使用すると Number Expected が返され、sort 関数で null オブジェクトが実行されます。 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 から null オブジェクト (機能する) を削除することにしました。

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 がどこで問題を抱えているかを知っていると思います。申し訳ありませんが、今回は IE に問題はありません。何が起こったのかというと、aまたはbnull/ ''/ false(または偽の値) の場合、コールバックは値を返しませんでした。これは、「予想される数」エラーを説明します。しかし、私はそれを処理したので、私の答えはおそらくうまくいくでしょう。:)

于 2012-06-08T17:13:32.510 に答える