使用Undercore创建对象集合
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"]
}
]
}
]
我用Undercore和_.groupBy,_.sortBy,_.countBy试过一些东西但遗憾的是,我所尝试的一切都不起作用。这在Undercore(或其他库)中可能吗?
顺便说一句,这个例子可能有一些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')
};
})
};
});
相关文章:
- Lodash从集合创建集合
- 在创建对象后附加一个jquery事件
- 错误:自动化服务器可以't创建对象
- 如何在不使用 new 关键字的情况下从函数创建对象
- 文本表示法VS.构造函数,用于在JavaScript中创建对象
- MongoDB-通过比较集合和对象的数组来返回现有字段的数组
- 创建对象函数原型和代码是错误的
- 使用Undercore创建对象集合
- 如何在JavaScript中创建对象时使用变量的值
- 使用System从C#集合创建JSON数组.网状物剧本序列化
- 正在创建对象的递归列表
- 这两种不同的创建对象文字的方法有什么区别
- ES6 const,用于在JavaScript中创建对象原型;这是一种模式吗
- 使用字符串作为名称创建对象
- 使用参数创建对象
- nunjucks集合创建对象
- 如何为对象集合创建接口
- 在另一个集合中存储引用会创建对象,但不会创建字符串Meteor
- 如何在JavaScript中创建对象集合并在另一个对象中赋值
- 从集合中创建对象