2017-10-16 8 views
0

それでは、私はthorughルーピングてるテーブルはこのように見ているとしましょう:追加配列は

enter image description here

は2列目の各一意の値がオブジェクトである必要があり、 キーの1つに、対応する行のすべての値を含める必要があります。このような 何か:

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

これは限り私が来るようになり、私はこだわっている...すべての

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; 
        } 
       } 
    }) 

}) 

答えて

1

まず、あなたが行うことができ、各列の一意の値を収集する必要があります各行を選択することによって&は、これらのすべての一意の値を含む配列にない場合は、2番目の列のテキストを追加します。このコードは、この問題を解決します:$("tr td:nth-child(2):contains("+arr[i]+")")

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

次に、この選択のforeachのは、宣言された配列arri-th値が含まれているtd値。

その後、選択した要素をforeachし、その親を取得して、エージェントを含む最初の列を検索します。$(this).parent().find("td:eq(0)").text()

Combain のJsobject内のすべてのこれらは、これらが次のデモ与える:

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

非常にエレガントなソリューションを、大感謝 – oceansmoving