Javascript jQuery.each()如何处理关联数组(对象)?
我有一个关联数组,里面有两个对象。通过Javascript jQuery.each()如何处理关联数组(对象)?,javascript,jquery,associative-array,Javascript,Jquery,Associative Array,我有一个关联数组,里面有两个对象。通过$(myassoc.each())运行此操作,回调只运行一次。此外,回调参数(索引和对象)分别返回0和整个关联数组 人们希望jQuery.each()为数组中的每个元素运行,返回正确的键作为索引,返回正确的元素作为对象 为什么没有发生这种情况,jQuery能做我想做的吗?试试这个: $.each(assocarray,function(i, value){ console.log('index: ' + i + ',value: ' + value);
$(myassoc.each()
)运行此操作,回调只运行一次。此外,回调参数(索引和对象)分别返回0和整个关联数组
人们希望jQuery.each()
为数组中的每个元素运行,返回正确的键作为索引,返回正确的元素作为对象
为什么没有发生这种情况,jQuery能做我想做的吗?试试这个:
$.each(assocarray,function(i, value){
console.log('index: ' + i + ',value: ' + value);
});
$.each(myassoc, function(index, value){
//your code
});
我想你在找的不是 试试这个:
$.each(assocarray,function(i, value){
console.log('index: ' + i + ',value: ' + value);
});
$.each(myassoc, function(index, value){
//your code
});
问题是
$。each()
函数在内部检索并使用传递的集合的length
属性。但是在没有整数索引的关联数组中,长度似乎总是0
。对于$。each()
,现在似乎没有什么可走的了
函数在内部检索并使用长度
传递的集合的属性
解决方案只是使用一个对象
var obj = {
"flammable": "inflammable",
"duh": "no duh"
};
$.each( obj, function( key, value ) {
alert( key + ": " + value );
});
非常
不要$(关联数组)。每个(函数(){…})
--这是
不要$.each(关联数组,函数(){…})代码>--具有模糊(1)的
要查看错误,请在javascript控制台中尝试以下操作:
> $.each({foo:1, length:-1, bar:2}, console.log)
foo 1
length -1
bar 2
> $.each({foo:1, length:0, bar:2}, console.log)
第一个示例输出了三行键值对,这是应该的。第二个什么也不输出
故事的寓意是,不要在对象上使用jQuery.each()。(JavaScript中的对象是关联数组。)事情可能永远正常,但您可能会遇到这样的风险:某一天,某个对象碰巧有一个名为length
的成员,而其值恰好是0
,然后您突然发现一个很难解释的bug。(我会让你猜,从这个沉重的回答来看,我是否曾经遇到过这种情况。)
如报告中所述:
如果需要迭代具有length属性的对象的所有键,jQuery.each不是正确的解决方案
我建议更进一步,jQuery.each永远不应该用于关联数组
(1) 这个“bug”可能永远也不会被修复,因为$.each()在历史上用于数组:“数组和具有长度属性的类似数组的对象(例如函数的arguments对象)通过数值索引进行迭代。”
以下是我所使用的[感谢]循环对象的属性名称和值,或者换句话说,关联数组的键和值:
function looper(object, callback) {
for (var key in object) {
if (object.hasOwnProperty(key)) {
if (false === callback.call(object[key], key, object[key])) {
break;
}
}
}
return object;
}
looper()则是美元的替代品。each()
:
- 在回调中,
这是每个值
- 在回调内部,返回
false
(不仅仅是falsy)将终止循环
- looper()返回最初传递给它的对象
- looper()适用于数组和对象
使用:
用$.each()试试,你会得到一个空结果。因为它将此特定对象解释为一个类似数组的零长度对象。您能显示代码吗<代码>$(obj).each()
可以很好地使用。您是否尝试过$。each(myassoc,func…
?如果内部只有两个对象(数组的两个键)所以只有两次迭代。如果您想每个
这两个对象,您必须执行。JavaScript的每个
都没有关联array@Raynos据我所知,关联数组只是键/值映射的另一个词。我在标题中指定了“对象”。