所以,让我们说我正在循环的表看起来像这样:
第二列中的每个唯一值应该是一个对象和where 其中一个键应包含相应行的所有值。 像这样:
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;
}
}
})
})
答案 0 :(得分:1)
首先,您应该收集每一行的唯一值,您可以通过选择每一行来实现。如果第二列的文本不在包含所有这些唯一值的数组中,请添加该文本。此代码将解决此问题:
var arr=[];
$("tr").each(function(){
if(!arr.includes($(this).find('td:eq(1)').text())){
arr.push($(this).find('td:eq(1)').text());
}
})
然后选择此值的foreach td
包含声明的数组i-th
的{{1}}值:arr
。
在foreach选择元素之后,获取其父元素,然后搜索包含代理的第一个列:$("tr td:nth-child(2):contains("+arr[i]+")")
。
在 Js $(this).parent().find("td:eq(0)").text()
中混合所有这些,这些将提供以下演示:
object
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;
}