【问题标题】:why does $.each() not work with arrays that have a string index in jquery? [duplicate]为什么 $.each() 不适用于在 jquery 中具有字符串索引的数组? [复制]
【发布时间】:2017-11-02 03:42:20
【问题描述】:

版本一:

var x = [];
x['abc'] = 'd';
x['xyz'] = 'abbb';
$.each(x, function(i, el) {
  console.error(el);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

不起作用。控制台中没有输出请参见此处:

我怎样才能使版本工作?

【问题讨论】:

  • 这不是带有字符串索引的数组。它是一个具有两个属性的数组,您已经添加了它。长度还是0。如果要遍历属性,可以使用Object.keys(x)
  • 不要为此使用数组。使用对象:var x = {}
  • 这是怎么重复的?.....这是一个常见的陷阱。
  • 你可以简单地使用 for-in: for(var _x in x){ console.log(_x,":",x[_x]); }
  • @Toskan 嗯,这是重复的因为这是一个常见的陷阱。

标签: javascript jquery arrays


【解决方案1】:

来自documentation

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

由于x 是一个数组,因此只考虑其数值属性,而不考虑其命名属性。因为它没有这些,所以什么都没有打印出来。

您可以通过使用对象而不是数组来使其工作。

var x = {};
x['abc'] = 'd';
x['xyz'] = 'abbb';
$.each(x, function(i, el) {
  console.error(el);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

【讨论】:

    【解决方案2】:

    在 javascript 中没有关联数组这样的东西。我们有对象。您当前使用对象而不是数组的代码应该可以解决问题。

    var x = {};  // Note that we're using curly brances
    x["abc"] = 123;
    x["def"] = 456;
    
    $.each(x, function(key, value){
       console.log(key, value);
    })
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

    【讨论】:

    • 那么我到底对我的阵列做了什么?
    • 使用对象。 {} 而不是 []
    猜你喜欢
    • 1970-01-01
    • 2017-10-28
    • 1970-01-01
    • 1970-01-01
    • 2011-10-20
    • 2018-07-29
    • 1970-01-01
    • 2012-09-18
    • 2011-11-18
    相关资源
    最近更新 更多