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