从多维数组javascript中删除0的行

时间:2013-02-13 22:50:35

标签: javascript

我有两组连接的数组,使它成为一个二维...我喜欢做的是删除任何在加入后具有0值的行然后排序desending并显示在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对我不起作用

请原谅我的代码初学者。

2 个答案:

答案 0 :(得分:0)

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

除此之外,嵌套循环使用相同的count变量存在很大问题。它至少在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]] );
    }
}

答案 1 :(得分: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);