【问题标题】:Underscore.js to filter out the unique valuesUnderscore.js 过滤掉唯一值
【发布时间】:2016-07-13 15:14:42
【问题描述】:

这是我的 Fiddle 的 link

我有一个从 Ajax 响应获得的 JSON 动态创建的表。

我在表格中有重复的条目。例如xxx,xxx。 我想将它们分组并像<td data-count="some count">xxx</td>

我尝试使用underscore.js,但它似乎破坏了rowspan 的功能。

我使用_countBy(arr)arr转换为对象,得到如下格式的对象。

{xxx: 2, zzz: 1}

问题:如何修改generateTable() 函数以适应这种变化。我尝试通过以下方式对其进行修改

var i=0;

$.each(queryObject,function(key,value){
   if(i == 0){
       i++;
       childrenHtml += ('<td rowspan="1" data-count="'+value+'">' + key + '</td>' + '</tr>');
   }
   else{
    childrenHtml += ('<tr><td rowspan="1" data-count="'+value+'">' + key + '</td>' + '</tr>');
   }
});

但是现在行跨度似乎是个问题。我该如何修改?

【问题讨论】:

    标签: javascript jquery html underscore.js


    【解决方案1】:

    您需要创建这样的函数来转换您的数据并对其进行分组:

      _.chain(data.result)
        .keys()//get all the keys buildname1 buildname2..etc
        .flatten()
        .each(function(key) {//for each key do a mapping and return a grouping.
          data.result[key] = _.chain(data.result[key]).flatten().map(function(d) {
            var key = _.chain(d).keys().first().value();
            var ob = {};
            ob[key] = _.chain(d).values().flatten().groupBy().value();//grouping by value
            return ob;
          }).value();
        }).value();
    

    这会将您的数据集转换为这种格式:

    {
       "buildname1":[
          {
             "table1":{
                "xxx":[
                   "xxx"
                ],
                "zzz":[
                   "zzz",
                   "zzz"
                ]
             }
          },
          {
             "table2":{
                "xxx":[
                   "xxx"
                ],
                "yyy":[
                   "yyy"
                ]
             }
          }
       ],
       "buildname2":[
          {
             "table1":{
                "xxx":[
                   "xxx",
                   "xxx"
                ],
                "zzz":[
                   "zzz"
                ]
             }
          },
          {
             "table2":{
                "xxx":[
                   "xxx",
                   "xxx"
                ]
             }
          },
          {
             "table3":{
                "xxx":[
                   "xxx"
                ],
                "yyy":[
                   "yyy"
                ]
             }
          }
       ]
    }
    

    那你就需要改变制表的业务逻辑,计算行跨度。

    工作代码here

    【讨论】:

    • 如果我们在任何孩子中有一个空数组,即在这种情况下说"table1": [] 表结构中断。关于如何解决这个问题的任何想法?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-01
    • 2014-02-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多