2017-10-16 5 views
0

Alors, disons la table, je suis en boucle répercutant est à la recherche comme ceci:tableau Ajouter comme valeur de l'objet en fonction de double dans la colonne

enter image description here

Chaque valeur unique dans la deuxième colonne doit être un objet et où une des clés doit contenir toutes les valeurs sur les lignes correspondantes. Quelque chose comme ceci:

skillMatrix[0]: {val: 2, agents: ['val1', 'val2', 'val3'} 

Ceci est aussi loin que je viens, je suis coincé ..

for (i = 0; i < q.length; i++) { 
     skillMatrix[i] = {} 
    } 

$.ajax(getSkills).done(function (res) { 

       var sg; 

    $(res).find('td:nth-child(3)').each(function(){ 

       a = $(this).parent().find('td:nth-child(2)').text(); 
       a = a.split('.'); 

       if(a[1] == '') { 
       first = a[3]; 
       last = a[2]; 
       } 
       else { 
       first = a[2]; 
       last = a[1]; 
       } 
       reJoin = last + ' ' + first; 

       var sg = $(this); 
       sg = sg.text().split('_'); 
       sg = sg[3]; 

       for (i = 0; i < q.length; i++) { 
        if (q[i] == sg) { 
        skillMatrix[i].group = sg; 
        skillMatrix[i].ag = reJoin; 
        } 
       } 
    }) 

}) 

Répondre

1

Tout d'abord, vous devez recueillir la valeur unique de chaque ligne, vous pouvez faire en sélectionnant chaque ligne & ajouter le texte de la deuxième colonne si ce n'est pas dans le tableau qui contiendra toutes ces valeurs uniques. Ce code permettra de résoudre ce problème:

var arr=[]; 
    $("tr").each(function(){ 
     if(!arr.includes($(this).find('td:eq(1)').text())){ 
     arr.push($(this).find('td:eq(1)').text()); 
     } 
    }) 

Sélectionnez ensuite foreach de ces valeurs la td qui contient la valeur i-th du tableau déclaré arr: $("tr td:nth-child(2):contains("+arr[i]+")").

Après que les éléments foreach sélectionnés, obtenir son parent recherche alors pour la première Colum qui contient l'agent: $(this).parent().find("td:eq(0)").text().

Combain tout cela dans un Jsobject, ceux-ci donnera la démonstration suivante:

var arr=[]; 
 
    
 
$("tr").each(function(){ 
 
    if(!arr.includes($(this).find('td:eq(1)').text())){ 
 
    arr.push($(this).find('td:eq(1)').text()); 
 
    } 
 
}) 
 
    var obj={}; 
 
for(var i=0;i<arr.length;i++) 
 
{ 
 
var agents=[]; 
 
$("tr td:nth-child(2):contains("+arr[i]+")").each(function(){ 
 

 
agents.push($(this).parent().find("td:eq(0)").text()); 
 
    
 

 
}); 
 

 
obj[i]= {val: arr[i], agents:agents}; 
 
} 
 

 
console.log(obj);
td{ 
 
border:solid 1px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<table> 
 
    <tbody> 
 
    <tr> 
 
     <td>value 1</td> 
 
     <td>2</td> 
 
    </tr> 
 
    <tr> 
 
     <td>value 2</td> 
 
     <td>3</td> 
 
    </tr> 
 
    <tr> 
 
     <td>value 3</td> 
 
     <td>2</td> 
 
    </tr> 
 
    <tr> 
 
     <td>value 4</td> 
 
     <td>1</td> 
 
    </tr> 
 
    </tbody> 
 
</table>

+0

solution très élégante, grand merci – oceansmoving