从对象数组创建多级组 [英] Create Multilevel groups from an Array of Objects

查看:91
本文介绍了从对象数组创建多级组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下数据类型

data = [{
    "grp" : ["A", "B", "C"],
    "val" : [1, 2, 3]
  }, {
    "grp" : ["A", "B", "D"],
    "val" : [2, 3, 4]
  }, {
    "grp" : ["A", "C", "C"],
    "val" : [1, 3, 5]
  }, {
    "grp" : ["B", "Y", "E"],
    "val" : [1, 3, 2]
  }
]

我想组成这样的团体

groups = {
  "A": {
    "B": {
      "C": [
        [1, 2, 3],
        [2, 3, 4]
      ],
      "D": [
        [1, 2, 3],
        [2, 3, 4]
      ]
    },
    "C": {
      "C": [
        [1, 3, 5]
      ]
    }
  },
  "B": {
    "Y": {
      "E": [
        [1, 3, 2]
      ]
    }
  }
}

grp数组最多可以包含3个元素.

grp array can be have maximum of 3 elements.

我尝试使用underscorejs进行如下操作,但是最终我创建了单个组,而不是嵌套组.

I tried using underscorejs something like below, however, I ended up creating individual groups, not nested groups.

var groups = _(data).reduce(function(memo, o) {
    _(o.groups).each(function(j) {
        memo[j] = memo[j] || [ ];
        memo[j].push(o);
    });
    return memo;
}, { });

将对正确方向上的任何想法表示赞赏.

Would appreciate any idea in the right direction.

推荐答案

var out = {};
_.each(data,function(item)
       {
           var firstKey = item['grp'][0];
           var secondKey = item['grp'][1];
           out[firstKey] = out[firstKey] || {};
           out[firstKey][secondKey] = out[firstKey][secondKey] || [];
           out[firstKey][secondKey].push(item['val']);
       });

演示: http://jsfiddle.net/HJngC/2/

这篇关于从对象数组创建多级组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆