根据您的描述,我建议采用不同的方法。我建议hotelType从字符串升级到应用程序的适当部分。hotel例如,您可以将其设为位于 a和您的$root(或酒店列表)之间的 ViewModel 。本质上,您的酒店列表将成为一个分组列表,基于hotelType.
以下 JSON 暗示了我正在谈论的结构:
var data = {
    allHotels : [{
          hotelType : "B&B",
          hotels : [{name: "West Inn", chosen: false}, 
                    {name: "East Inn", chosen: true}]
        },{
          hotelType : "All-inclusive",
          hotels : [{name: "North Inn", chosen: false}, 
                    {name: "Center Inn", chosen: false}, 
                    {name: "South Inn", chosen: false}]
    }]};
这将使计算每种类型的酒店数量变得非常容易。在您的视图中会是这样的:
<ul data-bind="foreach: allHotels">
    <li>
        <span data-bind="text: hotelType"></span>
        (<span data-bind="text: hotels().length"></span>)
        ...foreach: hotels here...
    </li>
</ul>
看看这个 jsfiddle来演示我的建议。
酒店的总数也很简单:hotelTypes 所有总数的总和。仅在需要时更新总数:如果从相关集合中删除/添加项目。