0

Json内でいくつかのレコードを見つけて印刷したいバックボーンにアプリがあります。

私のJSONは次のようなものです:

[
  {
    "id" : "r1",
    "hotel_id" : "1",
    "name" : "Single",
    "level" : "1"
  },
  {
    "id" : "r1_1",
    "hotel_id" : "1",
    "name" : "Double",
    "level" : "2"
  },
  {
    "id" : "r1_3",
    "hotel_id" : "1",
    "name" : "Double for single",
    "level" : "1"
  },
  {
    "id" : "r1_4",
    "hotel_id" : "1",
    "name" : "Triple",
    "level" : "3"
  },
  {
    "id" : "r2",
    "hotel_id" : "2",
    "name" : "Single",
    "level" : "1"
  },
  {
    "id" : "r2_1",
    "hotel_id" : "2",
    "name" : "Triple",
    "level" : "1"
  }
]

各ホテルの各部屋を組み合わせてレベルアップしたい。各ホテルには、より多くの部屋の組み合わせがありますが、独自のレベルがあります。私の目標は、id = 1 のホテルに対して次のようなものを出力することです (他の組み合わせでも同じです): ID 1 のホテルの最初の組み合わせ:

Room "Single", "level" : "1" , "hotel_id" : "1"
Room "Double", "level" : "2" , , "hotel_id" : "1"
Room "Triple", "level" : "3" , , "hotel_id" : "1"

ID 1 のホテルの 2 番目の組み合わせ:

Room "Double for single", "level" : "1" , "hotel_id" : "1"
Room "Double", "level" : "2" , , "hotel_id" : "1"
Room "Triple", "level" : "3" , , "hotel_id" : "1"

各ホテルにはある程度の部屋数を増やすことができますが、各ホテルに 1 つの部屋で組み合わせを構成したいと考えています。

これはバックボーンでの解析ですが、allRooms 内の JSON しか取得していません。

//each for all my hotel
_.each(this.collection.models, function(hotel) {
   var rooms = new Array();
   rooms.push(allRooms.where({hotel_id : hotel.id}));

   //this is where I have to construct my combination

   //this is the array for each combination
   hotel.get('rooms').push(rooms);
});

この組み合わせをどのように構築しますか?

4

2 に答える 2

1

まず、部屋のリストをホテルとレベルで分割する必要があります。

var rooms = _(allRooms.groupBy, "hotel_id");
for (var hotelid in rooms)
    rooms[hotelid] = _.groupBy(rooms[hotelid], "level");

探している「組み合わせ」は、(各ホテルの) レベルのデカルト積です。たとえば、このヘルパー関数を使用できます。次のように使用します。

_.each(this.collection.models, function(hotel) {
    var levels = rooms[hotel.id];
    var combinations = cartesian(_.values(levels));
    // put them on the hotel
});
于 2013-07-02T15:11:01.710 に答える