![](/img/trans.png)
[英]Combining 2 MongoDB collection objects with underscore or something else?
[英]Create collection of objects with Underscore
基本上,我有一个包含对象的数组,需要将它们组合在一起。 这有点难以解释,但是如果我给大家一个例子,它可能会更容易。
结果数据
[
{
"Category": "Préparé",
"Sandwich": "Martino",
"Ingredient": "Ansjovis",
"Price": 3.1
},
{
"Category": "Préparé",
"Sandwich": "Martino",
"Ingredient": "Tabasco",
"Price": 3.1
},
{
"Category": "Veggie",
"Sandwich": "Gezond",
"Ingredient": "Tomaat",
"Price": 2.5
},
{
"Category": "Veggie",
"Sandwich": "Gezond",
"Ingredient": "Kaas",
"Price": 2.5
}
];
这是我的数组的基本示例。 我无法更改此结构,这是我们的API提供数据的方式。
我真正需要的是这种结构:
[
{
"CategoryName": "Prépare",
"Sandwiches": [
{
"SandwichName": "Martino",
"Price": 3.1,
"Ingredients": ["Ansjovis", "Tabasco"]
}
]
},
{
"CategoryName": "Veggie",
"Sandwiches": [
{
"SandwichName": "Gezond",
"Price": 2.5,
"Ingredients": ["Tomaat", "Kaas"]
}
]
}
]
我已经用Underscore和_.groupBy,_。sortBy,_。countBy尝试了一些东西,但是,我尝试过的任何东西都没有实际作用。 Underscore(或其他一些库)甚至有可能吗?
同样在一个旁注中,此示例可能会有一些JSON结构错误,因为我自己编写了它。 API提供的数据格式正确。
该示例仅包含2个三明治,但是实时地,我将检索每个20个三明治的多个类别,依此类推。 这只是一个缩小的示例,但是它提供了我需要的想法。
试试这个简单的js
var map = {};
results.forEach( function(obj){
map[ obj.CategoryName ] = map[ obj.CategoryName ] || [];
map[ obj.CategoryName ].push( obj );
});
var output = Object.keys(map).map( function(key){
var arr = [];
map[key].forEach(function(obj){
arr.push( {
"SandwichName": obj.SandwichName,
"Price": obj.Price,
"Ingredients": obj.Ingredients
});
});
return { "CategoryName" : key , "Sandwiches" : arr };
});
以下代码段将为您解决问题:
var data = [...]; // this is your json-data
var result = _.map(_.uniq(_.pluck(data, 'Category')), function(category) {
var sandwiches = _.uniq(_.pluck(_.where(data, { Category: category }), 'Sandwich'));
return {
CategoryName: category,
Sandwiches: _.map(sandwiches, function(sandwich) {
return {
SandwitchName: sandwich,
Price: _.findWhere(data, { Category: category, Sandwich: sandwich }).Price,
Ingredients: _.pluck(_.where(data, { Category: category, Sandwich: sandwich }), 'Ingredient')
};
})
};
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.