$ .each对jquery中的对象数组不起作用

问题描述 投票:-1回答:4

我有一个数组,我需要使用这些项目,但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
4个回答
4
投票

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

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

2
投票

那不是一个对象数组;它是一个添加了字符串命名属性的数组。 JavaScript与PHP不同 - 数组和普通对象之间存在明显差异。

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

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

var person = {};

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


1
投票

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

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

然后,您将能够使用$.each(),因为它可以处理数组或普通对象。你将无法使用array forEach method,因为你不会有一个数组。

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


0
投票

试试这个:

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);
});
© www.soinside.com 2019 - 2024. All rights reserved.