1

我有一个 JS-hash 包含一个键length(它表示与散列长度完全不同的东西)并且需要对其进行迭代。

问题在于jQuery.each拒绝迭代它,因为它检测到length属性并认为它必须是数组或类似数组的对象。

来自 jQuery 文档:

具有长度属性的数组和类数组对象(例如函数的 arguments 对象)> 通过数字索引迭代,从 0 到 length-1。其他对象通过其命名属性进行迭代。

这个 JS fiddle说明了这个问题。

好吧,所以这一切都记录在案并且可以理解。但是,如果我只有一个名为的属性,该length怎么办?我是否必须在迭代哈希之前和之后进行痛苦的重命名,或者是否有可能告诉 jQuery 忽略此属性并将其视为任何其他对象属性?

非常感谢!

4

2 回答 2

3

不使用 jquery.each 但是...

for (var key in testHash2) {
    if (testHash2.hasOwnProperty(key)) {
        $('#result').append($('<li />').text(key + ':' + testHash2[key]));
    }
}

更新 忘记用“hasOwnProperty”清理循环以防万一......

于 2012-07-17T08:44:50.783 回答
1

这是一个修复该行为的快速补丁:

(function($,undefined){
    var initialEach = $.each;
    $.each = function(obj,fn){
       if($.isArray(obj) || obj.length === undefined)
           return initialEach.apply(this,arguments);
       // else iterate over the object that contains a 'length' property
       for(var key in obj)
           if(obj.hasOwnProperty(key))
                fn.call(obj[key],key,obj[key]);
    };
 })(jQuery);  

这是一个现场演示来理顺事情:http: //jsfiddle.net/gion_13/vwWm6/

于 2012-07-17T08:50:15.970 回答