我目前正在开发一个Backbone应用程序,并使用backbone-forms来生成该应用程序中使用的一些表单。我有一个带有两个选择框的表单,通过我的API从收集器中拉入数据。
这些选择框中的第二个依赖于第一个的值(类别与产品的关系)。但是,一个产品可以属于多个类别,因此下划线中的标准_.where不适用。
对于一个类别,JSON大致是这样的:
{id: 1, name: "Category 1"}然后这是产品的JSON:
{id: 1, name: "Product 1", categories: [{cat_id: 1},{cat_id: 2}]}当选择第一个选择值时,我需要一些方法来过滤id。
发布于 2013-07-03 03:08:09
var categoryId = 1; //your selected category id
var filteredProducts = _.filter(products, function (product) {
return !!_.findWhere(product.categories, {id: categoryId });
});最坏情况效率- O(n^2)
fiddle
发布于 2013-07-03 06:15:01
你可以稍微改进一下你的数据,让它更容易深入:
_.each(products, function(product) {
product.categoryIds = _.pluck(product.categories, "cat_id");
});现在,您可以使用以下命令简单地搜索某个cat_id:
var result = _.filter(products, function(product) {
return _.contains(product.categoryIds, cat_id);
});或者,如果您想使用更多内存,但访问速度更快(在进行多项选择时很有用):
var cats = _.reduce(categories, function(map, category) {
map[category.id] = category;
category.products = [];
return map;
}, {});
_.each(products, function(product) {
_.each(product.categories, function(category) {
cats[category.cat_id].products.push(product);
});
});然后
var result = cats[cat_id].products;https://stackoverflow.com/questions/17433640
复制相似问题