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

时间:2014-07-05 03:37:09

标签: javascript jquery arrays each

我有一个数组,我需要使用这些项目,但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);
});

4 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:2)

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

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

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

var person = {};

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

答案 2 :(得分:1)

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

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

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

此外,你的小提琴不起作用,因为你没有在 Frameworks&下面包含jQuery。左侧的扩展程序部分。请参阅此更新的有效版本:http://jsfiddle.net/4HJ4B/6/

答案 3 :(得分: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);
});