0

我有两组数组,它​​们连接起来使其成为二维数组。我喜欢做的是在连接后删除任何价格为 0 值的行,然后排序降序并显示在 html 表中

    var desc = new Array();
    var desc = ["Water","Heating","Electric","Gas"];

    var price = new Array();
    var price=["824","325","0","245"];

    var sortdesc;
    var sortdesc = new Array (2);

    for (i = 0; i < desc . length; ++ i)
    {   
      for (var i=0; i < price.length; i++)
        {
                    sortdesc[i] = Array(desc[i], price[i]);
                    if (price[i] == 0 )  
                     {       
                     sortdesc.splice(i,1);

                  }  
              }
     }


    sortdesc.sort(function(a,b){ return b[1] - a[1]; });

    function sortedtable (array)
    {

        document . write("<table  border>");
        var row;
        for (row = 0; row < array . length; ++ row)
        {
        document . write(" <tr>");
        var col;
        for (col = 0; col < array [row].length; ++ col)
            document . write("  <td>" + array [row] [col] + "</td>");
        document . write(" </tr>");

        }

        document.write("</table>");
    }

    sortedtable(sortdesc);

问题是我认为 .splice() 会重组数组我做错了什么?有没有更好的方法来做到这一点

我看到了其他问题,但他们都说使用 .splice() 而不是 delete.array[element] 但 .splice 对我不起作用

请原谅我的代码初学者。

4

2 回答 2

0

splice成功地从数组中删除了该项目,但在下一个循环中,您将sortdesc[i]再次分配给,因此删除的索引将保留undefined- 您创建了一个稀疏数组。

除此之外,使用相同计数变量的嵌套循环存在很大问题。至少从 开始,它并没有以无限循环结束price.length >= desc.length,但是这个构造是非常值得怀疑的。

要解决您的问题,只需使用以下命令将新元素(并且仅当您真的想添加它们)添加到sortdesc数组的末尾push()

// no need to double initialize
var desc = ["Water","Heating","Electric","Gas"];
var price = ["824","325","0","245"];

// the Array constructor does not take dimensions. You just want an empty array here
var sortdesc = [];

// … to fill it with other arrays:
for (var i = 0, l = Math.min(desc.length, price.length); i < l; i++) {
    if (price[i] != 0) {
        sortdesc.push( [desc[i], price[i]] );
    }
}
于 2013-02-13T23:15:28.080 回答
0

简短的回答 - 您不需要从数组中拼接/删除,只需事先检查,如果价格为零,则不要添加项目。

另一个快速评论 - 从您的数据来看, desc 和 price 数组的长度似乎相同。在这种情况下,您可以只使用一个 for 循环,无需遍历两个循环。

工作代码:

var desc = ["Water","Heating","Electric","Gas"];

var price = ["824","325","0","245"];

var sortdesc = [];

// Presuming both arrays with be the same length
for (i = 0; i < desc.length; ++ i) {
    if(price[i] !== "0") {
        sortdesc.push([desc[i], price[i]]);
    }
}

sortdesc.sort(function(a,b){ return b[1] - a[1]; });

function sortedtable (array)
{

    document . write("<table  border>");
    for (row = 0; row < array.length; ++ row)
    {
        document . write(" <tr>");
        for (col = 0; col < array[row].length; ++ col)
            document . write("  <td>" + array [row] [col] + "</td>");
        document . write(" </tr>");
    }

    document.write("</table>");
}

sortedtable(sortdesc);
于 2013-02-13T23:31:57.023 回答