Javascript 使用下划线将两个主干集合和模型合并到一个对象中
我有两个主干集合类别和项目,类别包含id、名称和项目的类别模型(w/c包含以逗号分隔的字符串格式的项目id)和包含项目模型(id、名称等)的项目集合 如何将它们合并到一个可以在把手模板中轻松渲染的对象中 示例结构:Javascript 使用下划线将两个主干集合和模型合并到一个对象中,javascript,backbone.js,underscore.js,javascript-objects,Javascript,Backbone.js,Underscore.js,Javascript Objects,我有两个主干集合类别和项目,类别包含id、名称和项目的类别模型(w/c包含以逗号分隔的字符串格式的项目id)和包含项目模型(id、名称等)的项目集合 如何将它们合并到一个可以在把手模板中轻松渲染的对象中 示例结构: var Categories = [{'id':'1', 'category_name':'Burgers', 'category_items':'1,2'},{'id':'2','category_name':'Drinks','category_items':'3'}]; va
var Categories = [{'id':'1', 'category_name':'Burgers', 'category_items':'1,2'},{'id':'2','category_name':'Drinks','category_items':'3'}];
var Items = [{'id':'1','item_name':'Burger 1'},{'id':'1','item_name':'Burger 2'},{'id':'1','item_name':'Chicken; 1'}];
var output = [{'id':'1', 'category_name':'Burgers', 'items':[{'id':'1','item_name':'Burger1', ...},{'id':'1','item_name':'Burger2', ...} ]}, {'id':'2', 'category_name':'Chicken', 'items':[{'id':'3','item_name':'Chicken1', ...} ]
样本输出:
var Categories = [{'id':'1', 'category_name':'Burgers', 'category_items':'1,2'},{'id':'2','category_name':'Drinks','category_items':'3'}];
var Items = [{'id':'1','item_name':'Burger 1'},{'id':'1','item_name':'Burger 2'},{'id':'1','item_name':'Chicken; 1'}];
var output = [{'id':'1', 'category_name':'Burgers', 'items':[{'id':'1','item_name':'Burger1', ...},{'id':'1','item_name':'Burger2', ...} ]}, {'id':'2', 'category_name':'Chicken', 'items':[{'id':'3','item_name':'Chicken1', ...} ]
是的,我尝试了很多,但似乎无法管理它我编写了一个名为“mergeObjectWithId”的函数。按照以下步骤合并两个集合中的数据:
function mergeObjectWithId(id){
//assume categories is your Category collection instance
var obj = categories.findWhere({id:id}).clone();
//assume items is your Item collection instance
obj.items = items.find({id:id}).slice(0);
return obj;
}
var output = mergeObjectWithId(1);
希望这对您有所帮助。依靠下划线的有用功能:
var json = _.map(c.toJSON(), function(c) {
return _.extend(c, {
category_items: _.map(c.category_items.split(','), function(id) {
return i.get(id).toJSON();
})
});
});
第一个
\uu.map
与\uu.extend
结合使用,仅用于替换类别项目
。我发现它非常滥用,但记不起是否有任何方法可以一次性实现这一点。谢谢,我设法创建了相同的函数,但没有使用findWhere和/或find,而是使用get,因为它是集合中唯一的id。哇,这是我需要的代码,代码行数更少,我知道我仍然可以优化它,但很难探索和实验各种下划线方法,我的版本使用每个,然后获取然后推送,但我更喜欢这个方法,谢谢。。。