2017-01-18 10 views
0

each関数は、の要素をhtmlのに置き、オブジェクト配列に配置します。私の問題は、テーブルのユニークな値だけが必要なことです。これは、私の配列に重複する値がある原因です。理想的にはProductvalProductの一意の値を見たいと思います。 valProductは、基本的にProduct`」と同じであるここに私の閉じがしようとしている:。.each()関数を使用した後にオブジェクト配列から重複する値を削除します。

var array_return = []; 
 

 
$(".table__product td:nth-child(1)").each(function() { 
 
    array_return.push({ 
 
    "Product": $(this).html(), 
 
    "valProduct": $(this).html() 
 
    }); 
 
}); 
 

 

 
array_return.sort(function(a, b) { 
 
    return a.Product - b.Product; 
 
}); 
 

 
// delete all duplicates from the array_return 
 
for (var i = 0; i < array_return.length - 1; i++) { 
 
    if (array_return[i].Product == array_return[i + 1].Product) { 
 
    delete array_return[i]; 
 
    } 
 
} 
 

 
// remove the "undefined entries" 
 
array_return = array_return.filter(function(el) { 
 
    return (typeof el !== "undefined"); 
 
}); 
 

 
alert(JSON.stringify(array_return));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/core.js"></script> 
 

 

 
<table class="table__product"> 
 
    <tr> 
 
    <td>Apple</td> 
 
    <td>3384</td> 
 
    <td>iPhone</td> 
 
    </tr> 
 
    <tr> 
 
    <td>Samsung</td> 
 
    <td>8800</td> 
 
    <td>Galaxy</td> 
 
    </tr> 
 
    <tr> 
 
    <td>LG</td> 
 
    <td>8684</td> 
 
    <td>V20</td> 
 
    </tr> 
 
    <tr> 
 
    <td>Google</td> 
 
    <td>8179</td> 
 
    <td>Pixel</td> 
 
    </tr> 
 
    <tr> 
 
    <td>Blackberry</td> 
 
    <td>4554</td> 
 
    <td>Storm</td> 
 
    </tr> 
 
    <tr> 
 
    <td>Motorolla</td> 
 
    <td>6764</td> 
 
    <td>Z force</td> 
 
    </tr> 
 
    <tr> 
 
    <td>LEASING_REVENUE</td> 
 
    <td NOWRAP align=RIGHT>-2100000</td> 
 
    </tr> 
 
    <tr> 
 
    <td>LEASING_REVENUE</td> 
 
    <td NOWRAP align=RIGHT>-2095011</td> 
 
    </tr> 
 
    <tr> 
 
    <td>LEASING_REVENUE</td> 
 
    <td NOWRAP align=RIGHT>-2095010</td> 
 
    </tr> 
 
    <tr> 
 
    <td>ECS/ACH</td> 
 
    <td align=RIGHT>4493</td> 
 
    </tr> 
 
    <tr> 
 
    <td>ECS/ACH</td> 
 
    <td align=RIGHT>4494</td> 
 
    </tr> 
 
    <tr> 
 
    <td>ECS/ACH</td> 
 
    <td align=RIGHT>4495</td> 
 
    </tr> 
 
</table>

+1

は、例えば、次のコードを参照してください? – samanime

+0

@ElliottFrischタグが削除されました。これは明らかに外れていました – user2314737

+0

この例の出力を投稿してください。 –

答えて

0

エラーが原因で二つの原因です:あなたはforループ のキーを削除することによって、配列を変更しているソートされた配列は、バックどこでも

  • に割り当てられていないの

    1. あなたがする必要があるのは、元の配列を変更する代わりにforループ内に新しい配列を定義し、新しい配列を元の配列に割り当てることです。それはあなたが変更する必要があるということは何をしているのか、やっていません

      var array_return = []; 
       
      var filtered_array = []; 
       
      var filtered_array_keys = []; 
       
      
       
      $(".table__product td:nth-child(1)").each(function() { 
       
          array_return.push({ 
       
          "Product": $(this).html(), 
       
          "valProduct": $(this).html() 
       
          }); 
       
      }); 
       
      
       
      // delete all duplicates from the array_return 
       
      for (var i = 0; i < array_return.length - 1; i++) { 
       
          if (filtered_array_keys.indexOf(array_return[i].Product) < 0) { 
       
          filtered_array_keys.push(array_return[i].Product); 
       
          filtered_array.push(array_return[i]); 
       
          } 
       
      } 
       
      array_return = filtered_array; 
       
      
       
      // remove the "undefined entries" 
       
      array_return = array_return.filter(function(el) { 
       
          return (typeof el !== "undefined"); 
       
      }); 
       
      
       
      alert(JSON.stringify(array_return));
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
       
      <script src="http://underscorejs.org/underscore-min.js"></script> 
       
      <table class="table__product"> 
       
          <tr> 
       
          <td>Apple</td> 
       
          <td>3384</td> 
       
          <td>iPhone</td> 
       
          </tr> 
       
          <tr> 
       
          <td>Samsung</td> 
       
          <td>8800</td> 
       
          <td>Galaxy</td> 
       
          </tr> 
       
          <tr> 
       
          <td>LG</td> 
       
          <td>8684</td> 
       
          <td>V20</td> 
       
          </tr> 
       
          <tr> 
       
          <td>Google</td> 
       
          <td>8179</td> 
       
          <td>Pixel</td> 
       
          </tr> 
       
          <tr> 
       
          <td>Blackberry</td> 
       
          <td>4554</td> 
       
          <td>Storm</td> 
       
          </tr> 
       
          <tr> 
       
          <td>Motorolla</td> 
       
          <td>6764</td> 
       
          <td>Z force</td> 
       
          </tr> 
       
          <tr> 
       
          <td>LEASING_REVENUE</td> 
       
          <td NOWRAP align=RIGHT>-2100000</td> 
       
          </tr> 
       
          <tr> 
       
          <td>LEASING_REVENUE</td> 
       
          <td NOWRAP align=RIGHT>-2095011</td> 
       
          </tr> 
       
          <tr> 
       
          <td>LEASING_REVENUE</td> 
       
          <td NOWRAP align=RIGHT>-2095010</td> 
       
          </tr> 
       
          <tr> 
       
          <td>ECS/ACH</td> 
       
          <td align=RIGHT>4493</td> 
       
          </tr> 
       
          <tr> 
       
          <td>ECS/ACH</td> 
       
          <td align=RIGHT>4494</td> 
       
          </tr> 
       
          <tr> 
       
          <td>ECS/ACH</td> 
       
          <td align=RIGHT>4495</td> 
       
          </tr> 
       
      </table>

  • +0

    "2つのこと:1)..."? –

    +0

    @MikeMcCaughan申し訳ありませんが、答えが誤って投稿されました、私は答えを更新しました。 –

    0

    私はあなたが新しい配列にユニークなアイテムをコピーするのではなくループ君を利用してたほうが良いかもしれないと思いますもし配列からアイテムを削除する(インデックス3の項目を言う) 1)インデックス4の項目は、項目3 BUな​​る:コードのこの部分に問題があることを利用している:

    for (var i = 0; i < array_return.length - 1; i++) { 
        if (array_return[i].Product == array_return[i + 1].Product) { 
        delete array_return[i]; 
        } 
    } 
    

    することです。それから、ループ内でiをインクリメントすると、インデックス4(これはインデックス5だった)がチェックされ、インデックス4は決してチェックされません。

    var newArray = []; 
    newArray.push(array_return[0]); 
    for (var i = 1; i < array_return.length; i++) { 
         if (array_return[i].Product != array_return[i - 1].Product) { 
         newArray.push(array_return[i]); 
         } 
        } 
    array_return = newArray; 
    

    私は構文が完璧であることを保証しませんが、これは間違いなくアイデアです。

    0
    var array_return = []; 
    
    $(".table__product td:nth-child(1)").each(function() { 
        var value = $(this).html(); 
    
        // check if a product with value is already exist 
        var exist = array_return.find(function(e){ 
         return e.Product == value; 
        }); 
        // if exist, don't save 
        if(exist) return; 
    
        // else push it 
        array_return.push({ 
        "Product": value, 
        "valProduct": value 
        }); 
    }); 
    
    // no need for more filtering. 
    
    関連する問題