【问题标题】:$.each Doesn't work for object array in jquery$.each 不适用于 jquery 中的对象数组
【发布时间】:2014-07-05 03:37:09
【问题描述】:

我有一个数组,我需要使用其中的每一项,但 forEach 和 $.each 不适用于此处的数组示例 (jsfiddle)

var person = new Array();
person["firstName"] = "John";
person["lastName"] = "Doe";
person["age"] = 46;
jQuery.each(person, function(index, item) {
    alert(index + " : " + item);
});

【问题讨论】:

标签: javascript jquery arrays each


【解决方案1】:

这是一个关联数组,实际上只是一个对象。要枚举某些对象 obj 的键值对,请使用 for 循环:

for (let key in obj) {
    console.log(key, ":", obj[key])
}

【讨论】:

    【解决方案2】:

    那不是对象数组;它是您添加了以字符串命名的属性的数组。 JavaScript 不像 PHP - 数组和普通对象之间有明显的区别。

    $.each() 函数将检测到您已向其传递了一个数组实例,然后它会查看数字索引的属性。您的以字符串命名的属性将被忽略。

    将您的“人”对象声明为普通对象,事情会更好:

    var person = {};
    

    JavaScript 数组用于数字索引的属性。如果您想要将字符串映射到值的东西,请使用普通对象。

    【讨论】:

      【解决方案3】:

      当您使用 forEach$.each() 循环遍历数组时,它们会遍历 numeric 索引。其中您没有任何考虑到您的代码正在使用字符串属性名称创建属性。使用对象而不是数组:

      var person = {};
      // other code as is
      

      然后您就可以使用$.each(),因为它可以处理数组或普通对象。您将无法使用array forEach method,因为您将没有数组。

      您的小提琴也不起作用,因为您没有在左侧的 Frameworks & Extensions 部分下包含 jQuery。查看此更新的工作版本:http://jsfiddle.net/4HJ4B/6/

      【讨论】:

        【解决方案4】:

        试试这个:

        var jsonStr = '[{"firstName": "John", "lastName": "Doe", "age": 46},{"firstName": "John-2", "lastName": "Doe-2", "age": 26}]';
        var person = $.parseJSON(jsonStr);
        $(person).each(function(index, item) {
            console.log(index + " : " + item.firstName);
        });
        

        【讨论】:

          猜你喜欢
          • 2015-08-03
          • 2011-09-06
          • 2014-02-23
          • 2021-01-20
          • 1970-01-01
          • 2016-03-21
          • 2017-03-20
          • 2011-09-12
          • 2015-05-22
          相关资源
          最近更新 更多