関数を使用してデカルト積を作成するバックボーンにアプリがあります。
これは機能です:
function cartesian(arg) {
var r = [], max = arg.length - 1;
function helper(arr, i) {
for (var j = 0, l = arg[i].length; j < l; j++) {
var a = arr.slice(0); // clone arr
a.push(arg[i][j]);
if (i == max) {
r.push(a);
} else helper(a, i + 1);
}
}
helper([], 0);
return r;
}
バックボーン内で呼び出すには、次のようにします。
return cartesian(_.values(this.rooms.groupBy('level')));
これは、オブジェクト ルームによってフェッチされた私の json の例です。
[{"hotelId":"10776","combination":"0|2|0|0|0","n_camere":2,"level":1,"id":"98%7E%7E%7Edouble_1"},
{"hotelId":"10776","combination":"1|0|1|0|0","n_camere":2,"level":1,"id":"99%7E%7E%7Esingle_1"},
{"hotelId":"10776","combination":"1|0|1|0|0","n_camere":2,"level":1,"id":"100%7E%7E%7Etriple_1"},
{"hotelId":"10776","combination":"1|0|0|0|0","n_camere":1,"level":2,"id":"98%7E%7E%7Edouble_2"}]
デカルト積を使用するこのモードでは、レベルごとにグループ化された 3 つの配列があり、すべての配列に最後の配列があるため、level2 はそのようなものです。
{"hotelId":"10776","combination":"0|2|0|0|0","n_camere":2,"level":1,"id":"98%7E%7E%7Edouble_1"},
{"hotelId":"10776","combination":"1|0|0|0|0","n_camere":1,"level":2,"id":"98%7E%7E%7Edouble_2"}
---------------
{"hotelId":"10776","combination":"1|0|1|0|0","n_camere":2,"level":1,"id":"99%7E%7E%7Esingle_1"},
{"hotelId":"10776","combination":"1|0|0|0|0","n_camere":1,"level":2,"id":"98%7E%7E%7Edouble_2"}
---------------
{"hotelId":"10776","combination":"1|0|1|0|0","n_camere":2,"level":1,"id":"100%7E%7E%7Etriple_1"},
{"hotelId":"10776","combination":"1|0|0|0|0","n_camere":1,"level":2,"id":"98%7E%7E%7Edouble_2"}
. 私が実装したいのは、レベル 1 に同じ組み合わせフィールドを持つ配列があり、私の目標はそのような配列であるため、レベルと組み合わせでグループ化することです。
{"hotelId":"10776","combination":"0|2|0|0|0","n_camere":2,"level":1,"id":"98%7E%7E%7Edouble_1"},
{"hotelId":"10776","combination":"1|0|0|0|0","n_camere":1,"level":2,"id":"98%7E%7E%7Edouble_2"}
---------------
{"hotelId":"10776","combination":"1|0|1|0|0","n_camere":2,"level":1,"id":"99%7E%7E%7Esingle_1"},
{"hotelId":"10776","combination":"1|0|1|0|0","n_camere":2,"level":1,"id":"100%7E%7E%7Etriple_1"},
{"hotelId":"10776","combination":"1|0|0|0|0","n_camere":1,"level":2,"id":"98%7E%7E%7Edouble_2"}
この結果を得ることができますか?