首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >主干/下划线过滤器多维集合

主干/下划线过滤器多维集合
EN

Stack Overflow用户
提问于 2013-07-03 02:58:05
回答 2查看 1.1K关注 0票数 1

我目前正在开发一个Backbone应用程序,并使用backbone-forms来生成该应用程序中使用的一些表单。我有一个带有两个选择框的表单,通过我的API从收集器中拉入数据。

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

对于一个类别,JSON大致是这样的:

代码语言:javascript
复制
{id: 1, name: "Category 1"}

然后这是产品的JSON:

代码语言:javascript
复制
{id: 1, name: "Product 1", categories: [{cat_id: 1},{cat_id: 2}]}

当选择第一个选择值时,我需要一些方法来过滤id。

EN

回答 2

Stack Overflow用户

发布于 2013-07-03 03:08:09

代码语言:javascript
复制
var categoryId = 1; //your selected category id

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

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

fiddle

票数 0
EN

Stack Overflow用户

发布于 2013-07-03 06:15:01

你可以稍微改进一下你的数据,让它更容易深入:

代码语言:javascript
复制
_.each(products, function(product) {
    product.categoryIds = _.pluck(product.categories, "cat_id");
});

现在,您可以使用以下命令简单地搜索某个cat_id

代码语言:javascript
复制
var result = _.filter(products, function(product) {
    return _.contains(product.categoryIds, cat_id);
});

或者,如果您想使用更多内存,但访问速度更快(在进行多项选择时很有用):

代码语言:javascript
复制
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);
    });
});

然后

代码语言:javascript
复制
var result = cats[cat_id].products;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17433640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档