2017-10-16 112 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