2013-02-13 16 views
0

我有两组数组被加入使它成为一个二维数据。我喜欢做的是删除任何在其加入后价格为0的行,然后进行排序取消和显示在html表中从多维数组中删除0行javascript

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 [元],但.splice是不是为我工作

请原谅我的代码初学者在这里。

回答

0

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

除此之外,你的嵌套循环使用相同的计数变量有一个大问题。至少从price.length >= desc.length开始,它不会以无限循环结束,但构造是非常有问题的。

为了解决你的问题,只需要添加新的元素(且仅当你真的想添加的话)通过使用push()sortdesc数组的末尾:

// 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]]); 
    } 
} 
+0

我喜欢Math.min(desc.length,price.length)..感谢您的帮助 – Rahul 2013-02-14 16:06:08

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); 
+0

谢谢..dont有足够的积分投票了.. – Rahul 2013-02-14 16:04:41