根据列中的重复添加数组作为对象值

时间:2017-10-16 17:52:55

标签: javascript jquery oop

所以,让我们说我正在循环的表看起来像这样:

enter image description here

第二列中的每个唯一值应该是一个对象和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;
                    }
                }
    })

})

1 个答案:

答案 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;
}