Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery.each()如何处理关联数组(对象)?_Javascript_Jquery_Associative Array - Fatal编程技术网

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据我所知,关联数组只是键/值映射的另一个词。我在标题中指定了“对象”。