我有一个javascript代码,用于在对值进行排序后为HTML生成表格的值。首先,我在javascript代码的开头手动输入值数组。它就像:名字= [tom,jerry,mickey,mouse];等级= [10,20,30,40]。然后对它们进行排序并在表中写入值。它运作得很完美。
grades=[10,20,30,40];
var swapped;
do {
swapped = false;
for (var i=0; i < grades.length-1; i++) {
if (grades[i] > grades[i+1]) {
var temp = grades[i];
grades[i] = grades[i+1];
grades[i+1] = temp;
swapped = true;
}
}
} while (swapped);
for(j=0;j<grades.length-1;j++)
myTable.rows[j].cells[1].innerHTML = grades[i-1];
}
但是现在我必须把它转换成一个函数。我试过这样:
function table(names,grades){
var swapped;
do {
swapped = false;
for (var i=0; i < grades.length-1; i++) {
if (grades[i] > grades[i+1]) {
var temp = grades[i];
grades[i] = grades[i+1];
grades[i+1] = temp;
swapped = true;
}
}
} while (swapped);
for(j=0;j<grades.length-1;j++)
myTable.rows[j].cells[1].innerHTML = grades[i-1];
}
但它不起作用。我试着称之为:
table([tom,jerry,mickey,mouse],[10,20,30,40]);
但它不起作用。桌子是空的。有什么问题?
感谢。
答案 0 :(得分:1)
表格为空。有什么问题?
我们不知道,尤其是你刚才说“那部分工作正常”。
问题是即使在调用这样的函数之后,数组也没有和以前一样的值。
当然,您已经交换了它们中的值:-)如果您不想修改最初传递的数组,则必须先复制它们。您可以使用slice
method:
function table(names,grades,table){
var swapped;
names = names.slice();
grades = grades.slice();
do {
swapped = false;
for (var i=0; i < grades.length-1; i++) {
if (grades[i] > grades[i+1]) {
var temp = grades[i];
grades[i] = grades[i+1];
grades[i+1] = temp;
swapped = true;
}
}
} while (swapped);
for (var j=0; j<grades.length; j++)
// ^^^ ^^
table.rows[j].cells[1].innerHTML = grades[j];
// ^^^
}
table(["tom","jerry","mickey","mouse"], [10,20,30,40], myTable);
注意我还修复了输出循环并使table
成为一个额外的参数。