如何使用javascript(函数式编程)将某个键属性上的字典数组分组并转换为不同的格式?

如何使用javascript(函数式编程)将某个键属性上的字典数组分组并转换为不同的格式?,javascript,arrays,dictionary,underscore.js,Javascript,Arrays,Dictionary,Underscore.js,我想将下面的数据集数组转换为不同的格式。目前,数组中的每个字典都有一个“count”、“fruit”和“first name”。我想为每个不同的名字和名字对每个“水果”类型的值创建一个新字典 例如,请参见下面的一些输入数据 var input_data = [{"count":1,"fruit":"apple","first_name":"abe"},{"count":1,"fruit":"apple","first_name":"bob"},{"count":10,"fruit":"banan

我想将下面的数据集数组转换为不同的格式。目前,数组中的每个字典都有一个“count”、“fruit”和“first name”。我想为每个不同的名字和名字对每个“水果”类型的值创建一个新字典

例如,请参见下面的一些输入数据

var input_data = [{"count":1,"fruit":"apple","first_name":"abe"},{"count":1,"fruit":"apple","first_name":"bob"},{"count":10,"fruit":"banana","first_name":"bob"},{"count":5,"fruit":"cherry","first_name":"abe"}]
我们知道该数据集的类别为[‘苹果’、‘香蕉’、‘樱桃’]

var desired_output = 
[{name: 'abe',data:[1,0,5]},
{name: 'bob',data:[1,10,0]}]

可以使用哈希表作为名称引用,使用对象作为rigth索引进行计数

var input_data=[{“count”:1,“水果”:“apple”,“first_name”:“abe”},{“count”:1,“水果”:“apple”,“first_name”:“bob”},{“count”:10,“水果”:“banana”,“first_name”:“bob”},{“count”:5,“水果”:“cherry”,“first_name”:“abe”},
类别=[‘苹果’、‘香蕉’、‘樱桃’],
cat={},
结果=[];
类别.forEach(函数(a,i){cat[a]=i;});
输入\u data.forEach(函数(a){
如果(!这个[a.名字]){
this[a.first_name]={name:a.first_name,data:categories.map(函数(){return 0;})};
结果.推送(这个[a.名字]);
}
此[a.first_name].data[cat[a.fruit]+=a.count;
},Object.create(null));

控制台日志(结果)
您是否尝试过groupBy?我看不到输入数据和所需输出中的数据数组之间有任何关系?@Bergi-您如何使用groupBy?这可能就是我要找的。@Ozan-这种关系本质上是我想要一本abe的字典和一本bob的字典,其中有一个名为“data”的属性,它有一个列表,指示每个水果的数量。例如,根据输入,我们知道Bob上面有1个苹果、10个香蕉和0个樱桃,所以我希望列表是[1,10,0]。@Chris:首先,通过简单的迭代(或者类似于
uniq(map('fruit',data))
)来创建categories数组。对
属性使用
groupBy
。首先使用name
属性,然后将值映射到所需的输出元素(选择名称,将每个项目映射到categories数组中的索引)。这里唯一的问题是,我希望结果反映Bob有10个香蕉,Abe有5个樱桃。例如,这里的结果生成[{name:'abe',data:[1,0,1]},{name:'bob',data:[1,1,0]}],但我希望它生成[{name:'abe',data:[1,0,5]},{name:'bob',data:[1,10,0]}]