Javascript数组中的联接和聚合

Javascript数组中的联接和聚合,javascript,arrays,linq.js,Javascript,Arrays,Linq.js,我已经尝试了几个小时使用json.js来实现这一点,但对于一些看似简单的东西来说,这实在是太多了。我有以下示例数据: var hotels = [ { id: 101, Name: "Hotel 101", WebFacilities: [8, 9, 10] }, { id: 102, Name: "Hotel 101", WebFacilities: [8] }, { id: 103, Name: "Hotel 101", WebFaci

我已经尝试了几个小时使用json.js来实现这一点,但对于一些看似简单的东西来说,这实在是太多了。我有以下示例数据:

    var hotels = [
        { id: 101, Name: "Hotel 101", WebFacilities: [8, 9, 10] },
        { id: 102, Name: "Hotel 101", WebFacilities: [8] },
        { id: 103, Name: "Hotel 101", WebFacilities: [8, 10] }
    ];

    var facilities = [
        { id: 8, Name: "Facility 8" },
        { id: 9, Name: "Facility 9" },
        { id: 10, Name: "Facility 10" }
    ];
我想得到这个:

    var selectedFacilities = [
        { id: 8, Name: "Facility 8", Count: 3 },
        { id: 9, Name: "Facility 9", Count: 1 },
        { id: 10, Name: "Facility 10", Count: 2 }
    ];
我如何做到这一点?

使用以下方法:

var selectedFacilities = facilities;

for(var i = 0; i < facilities.length; i++) {
    for(var j = 0; j < hotels.length; j++) {
        if(hotels[j]["id"] == facilities[i]["id"]) {
            // Add data
            selectedFacilities[i]["Count"] = hotels[i]["WebFacilities"].length;
        } else {
            selectedFacilities[i]["Count"] = 0;
        }
    }

}

因此,你似乎在试图计算每个设施的数量

以下是使用C编写查询的一种方法:

var酒店设施= 从酒店到酒店 从hotel.WebFacilities中的id开始 组id逐id; 变量查询= 从设施到设施 将g加入facility.id上的hotelFacilities等于g.Key 选择新的 { id=facility.id, 名称=设施。名称, 计数=g.计数, }; 现在,如果您可以使用方法语法来描述这一点,那么它几乎是对linq.js版本的1:1转换

请注意,编译器转换上述内容的方式通常会在前一个SelectMany调用中包含GroupBy调用。然而,这样编写将使编写linq.js等效查询更容易,也不那么麻烦

var hotelFacilities=酒店 .SelectManyhotel=>hotel.WebFacilities .GroupByid=>id; var查询=贷款 参加 酒店设施, facility=>facility.id, g=>g.键, 设施,g=>新建 { id=facility.id, 名称=设施。名称, 计数=g.计数, } ; 以及等效的linq.js查询

var hotelFacilities=Enumerable.Fromhotels .SelectManyhotel=>hotel.WebFacilities .GroupByid=>id .托雷; var query=Enumerable.Fromfacilities 参加 酒店设施, facility=>facility.id, g=>g.键, facility,g=>{id:facility.id,Name:facility.Name,Count:g.Count} .托雷;
这似乎不对。我想这是我不清楚的错误。这个想法是为了得到每个设施的酒店数量。我已经更新了ID,所以这是一个更清晰、更好的答案。非常感谢。