我的javascript代码中有两个对象存在问题。
我的第一个对象是来自我未在此处列出的API调用,但传递到我的data
函数的getStudentStats()
变量是该API调用的结果,可以看到其输出在下图突出显示 [1] 。这是学生及其相关数据的列表。
我的第二个对象是JSON调用的结果,可以在下面看到(UWA.Data.getJson()
函数)。它的输出可以在下面突出显示的图像中看到 [2] 。这是学生的ID列表和我当地数据库的一些统计数据,即他们收到的标志数量以及为他们筹集的干预数量。
getStudentStats : function(data) {
/* [1] Console log */
console.log(data);
var student_list = '';
for( var i = 0; i < data.length; i++ )
student_list += data[i].id + ',';
student_list = student_list.substring(0, student_list.length - 1);
var Students = [];
var Student_Data = data;
UWA.Data.getJson(FLAGS_Assign_Flags.url + 'get_students_stats&arg=' + student_list, function(data) {
/* [2] Console log */
console.log(data);
for( var i = 0; i < data.length; i++ ) {
var Student_ID = data[i].Student_ID;
var obj = { 'flags': data[i].Flags, 'interventions': data[i].Interventions };
Students[Student_ID] = obj;
}
/* [3] Console log */
console.log(Students);
FLAGS_Assign_Flags.displayStudents(Students, Student_Data);
});
},
我要做的是,基本上,显示来自这两个对象的一些信息(使用jQuery .html()
和字符串变量)。
displayStudents : function(students, data) {
/* Set up our HTML variable which we'll .html() when it's populated */
var StudentsHTML = '<ul id="students_display">';
for( var i = 0; i < data.length; i++ ) {
/* For each student in the `data` object, grab their ID to access the correct element in the students object */
var id = data[i].id;
/* Set up a variable which we'll use to display the students' stats in our LI */
var stats = '<div>';
/* If the student doesn't have any flags or interventions, manually set the text */
if( typeof students[id] != 'undefined' )
stats += ' (F:<span class="f">' + students[id].Flags + '</span>|I:<span class="i">' + students[id].Flags + '</span>)';
else
stats += ' (F:<span class="f">0</span>|I:<span class="i">0</span>)';
stats += '</div>';
/* Produce checkbox, name and stats for each student and add them to the HTML variable */
StudentsHTML += '<li><input type="checkbox" name="students" value="' + data[i].id + '" /> ' + data[i].firstname + ' ' + data[i].surname + stats + '</li>';
}
StudentsHTML += '</ul>';
/* Set the HTML... */
$('#students').html(StudentsHTML);
/* Do some other stuff not relevant to this question! */
FLAGS_Assign_Flags.displayForm();
},
问题是,正如您在下面的图片中看到的那样突出显示 [3] ,我的Students
对象在控制台中显示为垃圾加载,我无法访问任何信息从它。
这是一个范围问题,还是我错误地设置了我的对象数组?
答案 0 :(得分:2)
Students[Student_ID] = obj;
可能是问题。
例如:
var arr = [];
arr[4] = {};
=>
[undefined × 4, Object]
答案 1 :(得分:2)
您已将var Students = [];
创建为数组,稍后将其用作关联数组,以便为其指定值:
Students[Student_ID] = obj;
这不起作用,您应该将Students var创建为对象:
var Students = {};
Javascript没有'关联数组'的概念,你应该为此目的使用基本对象。
稍后,您可以使用for in
循环使用for in
,使用for (var i in Students) {
if (!Students.hasOwnProperty(i)) continue; // skip inherited properties
// i == StudentID
// Students[i] == your student object
}
,将其与call to hasOwnProperty结合使用:
{{1}}