【问题标题】:$.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);
});