Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Unique rows in HTML using Javascript

I'm trying to display unique rows based on values of the first column.I have tried this a lot taking cue from a similar question.

    <table id="test" border="1">
    <tr>
        <td>test1</td>
        <td>test2</td>
        <td>test3</td>
    </tr>
      <tr>
          <td>test1</td>
          <td>test2</td>
          <td>test5</td>
    </tr>
    <tr>
        <td>test6</td>
        <td>test2</td>
        <td>test5</td>
    </tr>
      <tr>
              <td>test6</td>
              <td>test6</td>
              <td>test9</td>
        </tr>
    </table

>

 **BEFORE**

 test1  test2   test3
 test1  test2   test5
 test6  test2   test5
 test6  test6   test9

 **AFTER**

 test1  test2   test3  
 test6  test2   test5

Here's what I have tried using codes from a similar situation

     arr = [];
     $('#test td').each(function(){
        key = "" + $(this).index(); 
    
       if(arr.indexOf( key ) == 1)
           arr.push($.trim($(this).text()));
       else
        $(this).closest('tr').hide();    
      alert(arr[]);
      });
  **RESULT**:      

  test1 test2   test3
like image 227
MnZ Avatar asked Jun 13 '26 11:06

MnZ


2 Answers

Loop each first td adding the value to a lookup object if its not not already present. If it is present, hide the current row.

var found = {};
    $('#test td:first-child').each(function(){
       var td = $(this);
       var value = td.text();
       if (found[value])
          td.closest('tr').hide();
       else
          found[value] = true;
    });

var found = {};
    $('#test td:first-child').each(function(){
       var td = $(this);
       var value = td.text();
       if (found[value])
          td.closest('tr').hide();
       else
          found[value] = true;
    });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
 <table id="test" border="1">
    <tr>
        <td>test1</td>
        <td>test2</td>
        <td>test3</td>
    </tr>
      <tr>
          <td>test1</td>
          <td>test2</td>
          <td>test5</td>
    </tr>
    <tr>
        <td>test6</td>
        <td>test2</td>
        <td>test5</td>
    </tr>
    <tr>
        <td>test6</td>
        <td>test6</td>
        <td>test9</td>
    </tr>
    </table>
like image 97
Alex K. Avatar answered Jun 15 '26 02:06

Alex K.


You can also use filter to find rows to remove:

$('#test tr').filter(function() {
    var text = $(this.cells[0]).text();
    return $(this).prev('tr').filter(function() {
        return $(this.cells[0]).text() === text;
    }).length;
}).remove();

$('#test tr').filter(function() {
    var text = $(this.cells[0]).text();
    return $(this).prev('tr').filter(function() {
        return $(this.cells[0]).text() === text;
    }).length;
}).remove();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table id="test" border="1">
    <tr>
        <td>test1</td>
        <td>test2</td>
        <td>test3</td>
    </tr>
    <tr>
        <td>test1</td>
        <td>test2</td>
        <td>test5</td>
    </tr>
    <tr>
        <td>test6</td>
        <td>test2</td>
        <td>test5</td>
    </tr>
    <tr>
        <td>test6</td>
        <td>test6</td>
        <td>test9</td>
    </tr>
</table>
like image 28
dfsq Avatar answered Jun 15 '26 01:06

dfsq



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!