0

私はそれを2次元にするために結合された2セットの配列を持っています..私がしたいのは、結合後に価格が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() が配列を再構築すると思ったのですが、何が間違っていましたか? これを行うためのより良い方法はありますか

私は他の質問を見ましたが、彼らは皆、delete.array[element] の代わりに .splice() を使用すると言いましたが、.splice は私にとってはうまくいきません

ここで私のコード初心者を許してください。

4

2 に答える 2

0

簡単な答え-アレイからスプライス/削除する必要はありません。事前にチェックを行い、価格がゼロの場合はアイテムを追加しないでください。

もう1つの簡単なコメント-データから、desc配列とprice配列の両方が同じ長さになるようです。この場合、1つの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 に答える
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 に答える