1

我目前正在开发一个 Backbone 应用程序,并且正在使用主干表单来生成应用程序中使用的一些表单。我有一个带有两个选择框的表单,它们通过我的 API 从收集器中提取数据。

这些选择框中的第二个取决于第一个(类别与产品关系)的值。但是,一个产品可以属于多个类别,因此_.where下划线中的标准不会这样做。

这是一个类别的 JSON 大致的样子:

{id: 1, name: "Category 1"}

然后这是产品的 JSON:

{id: 1, name: "Product 1", categories: [{cat_id: 1},{cat_id: 2}]}

选择第一个选择值时,我需要某种方法来过滤ID。

4

2 回答 2

0
var categoryId = 1; //your selected category id

var filteredProducts = _.filter(products, function (product) {
   return !!_.findWhere(product.categories, {id: categoryId });
});

最坏情况下的效率 - O(n^2)

小提琴

于 2013-07-02T19:08:08.727 回答
0

您可以稍微完善您的数据,以便更容易深入研究:

_.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;
于 2013-07-02T22:15:01.450 回答