jQuery:迭代包含键'length'的哈希

时间:2012-07-17 08:39:41

标签: jquery hash key loops

我有一个包含密钥length的JS哈希(表示与哈希长度完全不同的东西),需要迭代它。

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

来自jQuery文档:

  

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

This JS fiddle说明了问题。

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

提前多多谢谢!

2 个答案:

答案 0 :(得分:2)

如何不使用jquery.each但......

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

<强>已更新 忘了用“hasOwnProperty”来清理循环以防万一...

答案 1 :(得分: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/