-1

在一个部分对象中,我有一个CategoryId- 就像一个外键。现在,我想将每个部分复制到匹配的类别对象中。

来源:

var sections = [{title:"FirstSection", CategoryId : 1},
                {title:"SecondSection", CategoryId : 1}, 
                {title:"ThirdSection", CategoryId : 2}];
var categories = [{title:"Cat1", Id : 1},
                 {title:"Cat2", Id : 2}];

结果将如下所示:

categories = [{title:"Cat1", 
               Id : 1, 
               sections : [{title:"FirstSection", CategoryId : 1},
                           {title:"SecondSection", CategoryId : 1}]
              },
              {title:"Cat2", 
               Id : 1, 
               sections: [{title:"ThirdSection", CategoryId : 2}]
              }];

现在所有的节CategoryId = 1都在 ID = 1 的类别的节数组中。

也许我正在搜索错误的关键字,但我找不到解决方案。

4

2 回答 2

1

在这种情况下,我会使用下划线库(您可以手动完成所有这些操作)。

http://underscorejs.org/#findWhere

当您遍历类别数组时,您可以轻松地执行以下操作:

_.findWhere(sections, {categoryId: 1});  

此外,您可以使用下划线:

var combined = _.groupBy(categories, function(cat){ 
    cat.sections = _.findWhere(sections, {CategoryId: cat.Id});
    return cat;
 });

并结合将拥有您正在寻找的东西。

演示:http: //jsfiddle.net/lucuma/kjkkV/1/

于 2013-04-06T20:35:29.920 回答
1

如果支持(> IE8 和所有其他浏览器),这很容易通过...

categories.forEach(function(category) {
    category["sections"] = sections.filter(function(s) {
        return s.CategoryId === category.Id;
    });
});

例子

于 2013-04-06T20:42:08.783 回答