从对象数组创建多级组 [英] Create Multilevel groups from an Array of Objects
本文介绍了从对象数组创建多级组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有以下数据类型
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屋!
查看全文