0

関数を使用してデカルト積を作成するバックボーンにアプリがあります。

これは機能です:

    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"}

この結果を得ることができますか?

4

0 に答える 0