为了澄清这个问题,我有一个数组,在数组中有一堆对象。我可以根据每个对象的键值重新排列数组中的对象吗?
当我试图这样做时,它一直告诉我变量(在这种情况下,学生)是未定义的。
当我使用内置排序功能时,它完美运行。但是,这是一项学校作业,我必须显示快速排序功能的细分。
以下是我正在使用的代码:
function swap(student, firstIndex, secondIndex){
var temp = student[firstIndex];
student[firstIndex] = student[secondIndex];
student[secondIndex] = temp;
}
function partition(student, left, right) {
var pivot = student[Math.floor((right + left) / 2)],
i = left,
j = right;
while (i <= j) {
while (student[i] < pivot) {
i++;
}
while (student[j] > pivot) {
j--;
}
if (i <= j) {
swap(student, i, j);
i++;
j--;
}
}
return i;
}
function quickSort(student, left, right) {
var index;
if (student.length > 1) {
left = typeof left != "number" ? 0 : left;
right = typeof right != "number" ? student.length - 1 : right;
index = partition(student, left, right);
if (left < index - 1) {
quickSort(student, left, index - 1);
}
if (index < right) {
quickSort(student, index, right);
}
}
return student;
}
var studentNumbersArray = []
var randomArray = [];
for (i = 0; i < studentsArray.length; i++) {
studentNumbersArray.push(studentsArray[i].studentNumber);
}
function sortStudentNumbers() {
var student = studentNumbersArray.name; // <-- THIS IS WHERE I AM GETTING ERROR
quickSort(student);
var updatedStudentArray = JSON.stringify(studentsArray);
localStorage.setItem("students", updatedStudentArray);
location.reload();
}
答案 0 :(得分:1)
在另一个函数中,不能使用函数内定义的变量。每个函数都有自己的作用域,为了在函数之间传递数据(在变量内部),你必须在upper(全局)作用域中创建一个变量。这意味着,你必须在函数之外创建student和updatedStudentArray并使用它们而不在函数中声明(在这种情况下为sortStudentNumbers()
)
var student;
var updatedStudentArray;
function swap(student, firstIndex, secondIndex){
var temp = student[firstIndex];
student[firstIndex] = student[secondIndex];
student[secondIndex] = temp;
}
// ..................................
// ------ removed for clearity
// ..................................
function sortStudentNumbers() {
student = studentNumbersArray.name; // <-- THIS IS WHERE I AM GETTING ERROR
quickSort(student);
updatedStudentArray = JSON.stringify(studentsArray);
localStorage.setItem("students", updatedStudentArray);
location.reload();
}
这些我发现的错误。但是,当我执行此代码时,我在控制台上得到studentsArray
未定义的错误。你的studentsArray
在哪里?如果你有它,那么它现在应该全部工作。
编辑:
在您创建第二个问题后,我很快就有机会查看修改后的代码。别忘了在这里更新你的问题。
我对您修改过的代码的回答:
你必须设置一个&#34;学生&#34;首先键入localStorage,以便为它使用getItem()。您在localStorage中没有任何内容,这就是当您尝试从那里获取数据时未填充变量的原因。因此,您收到错误&#34; Cannot read property 'studentNumber' of null
&#34;。