Javascript数组参数不起作用

时间:2014-02-12 02:19:35

标签: javascript arrays function

我有一个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]);

但它不起作用。桌子是空的。有什么问题?

感谢。

1 个答案:

答案 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成为一个额外的参数。