2017-10-16 111 views
0

所以,讓我們說我在循環thorugh的表看起來像這樣:添加數組對象值

enter image description here

在第二列中的每個唯一值都應該是一個對象,其中 其中一個鍵應該包含相應行上的所有值。 事情是這樣的:

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

首先,你應該收集各行的獨特價值,你可以這樣做它通過選擇每一行&添加第二列的文本,如果它不在包含所有這些唯一值的數組中。此代碼將解決這個問題:

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

然後選擇的foreach的這個值包含聲明數組arri-thtd$("tr td:nth-child(2):contains("+arr[i]+")")

之後,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