Как включить постоянные строковые значения в уменьшенные значения (Crossfilter и Reductio)

#javascript #crossfilter #reductio

#javascript #crossfilter #сокращение

Вопрос:

Учитывая данные, которые выглядят как:

 data = [
    {   
        "partner": "ABCD",
        "category": "CORTICOSTERIODS",
        "name": "NP Slow Meedrol Methylprednisolone Sodium Succinate Injection USP 500mg x 1 Vial",
        "price_sum": 22288.00,
        "qty_sum": 50.00000000000000000
    },
    {
        "partner": "ABCD",
        "category": "MEDICAL DISPOSABLE",
        "name": "4 INCH CAST FIBREGLASS",
        "price_sum": 135324.00,
        "qty_sum": 63.00000000000000000
    },
    {
        "partner": "ABCD",
        "category": "DERMATOLOGICALS",
        "name": "ABF CREAM 20G",
        "price_sum": 150169.29,
        "qty_sum": 150.00000000000000000
    },
    {   
        "partner": "CDEF",
        "category": "CORTICOSTERIODS",
        "name": "NP Slow Meedrol Methylprednisolone Sodium Succinate Injection USP 500mg x 1 Vial",
        "price_sum": 22288.00,
        "qty_sum": 50.00000000000000000
    },
    {
        "partner": "CDEF",
        "category": "MEDICAL DISPOSABLE",
        "name": "4 INCH CAST FIBREGLASS",
        "price_sum": 135324.00,
        "qty_sum": 63.00000000000000000
    }
]
  

Я хотел бы добавить категорию ключей к значениям, сгруппированным по именам, наряду с суммой цен и qtys для дальнейшей обработки. С помощью and я получил то, что может использоваться другими функциями, просто я не мог понять, как добавить к нему категорию каждого из ключей. crossfilter reductio

Что я сейчас использую:

 function categ_tab(data){
    // The needed data should be grouped by names summed up by qty and price
    // Thus crossfilter and reductio will be used to take the burden off server
    var group = crossfilter(data).dimension(function(d) { return d.name; }).group(),
        reducer = reductio();
    // sum up qty and price
    reducer.value("qty").sum(function(d) { return d.qty_sum; });
    reducer.value("price").sum(function(d) { return d.price_sum; });
    return reducer(group).all();
  

Текущий результат:

 [
    {
        "key":"4 INCH CAST FIBREGLASS",
        "value":{
            "qty":{"sum":126},
            "price":{"sum":270648}
        }
    },
    {
        "key":"ABF CREAM 20G",
        "value":{
            "qty":{"sum":150},
            "price":{"sum":150169.29}
        }
    },
    {
        "key":"NP Slow Meedrol Methylprednisolone Sodium Succinate Injection USP 500mg x 1 Vial",
        "value":{
            "qty":{"sum":100},
            "price":{"sum":44576}
        }
    }
]
  

Желаемый результат:

 [
    {
        "key":"4 INCH CAST FIBREGLASS",
        "value":{
            "qty":{"sum":126},
            "price":{"sum":270648},
            "category": {"iDontCare":"MEDICAL DISPOSABLE"}
        }
    },
    {
        "key":"ABF CREAM 20G",
        "value":{
            "qty":{"sum":150},
            "price":{"sum":150169.29},
            "category": {"iDontCare":"DERMATOLOGICALS"}
        }
    },
    {
        "key":"NP Slow Meedrol Methylprednisolone Sodium Succinate Injection USP 500mg x 1 Vial",
        "value":{
            "qty":{"sum":100},
            "price":{"sum":44576},
            "category": {"iDontCare":"CORTICOSTERIODS"}
        }
    }
]
  

Спасибо.

Комментарии:

1. Я не понимаю имен iDontCare полей в вашем примере, но если вы ищете массив категорий для каждого ключа, похоже, что ValueList должен выполнить эту работу.

2. Спасибо @Gordon, iDontCare просто использовалось для обозначения любого имени, которое мне подходит. Я решил это с помощью списка значений, на который вы ссылались, я никогда не думал, что это может быть так дешево. Спасибо.

Ответ №1:

Спасибо @Gordon Я никогда не знал, что это может быть так дешево, ValueList сделал свое дело:

 function categ_tab(data){
    // The needed data should be grouped by names summed up by qty and price
    // Thus crossfilter and reductio will be used to take the burden off server
    var group = crossfilter(data).dimension(function(d) { return d.name; }).group(),
        reducer = reductio();
    // sum up qty and price
    reducer.value("qty").sum(function(d) { return d.qty_sum; });
    reducer.value("price").sum(function(d) { return d.price_sum; });
    reducer.value("category").valueList(function (d) { return d.category;});
    return reducer(group).all();
  

Дает:

 [
    {
        "key":"4 INCH CAST FIBREGLASS",
        "value":{
            "qty":{"sum":126},
            "price":{"sum":270648},
            "category": {"valueList":["MEDICAL DISPOSABLE"]}
        }
    },
    {
        "key":"ABF CREAM 20G",
        "value":{
            "qty":{"sum":150},
            "price":{"sum":150169.29},
            "category": {"valueList":["DERMATOLOGICALS"]}
        }
    },
    {
        "key":"NP Slow Meedrol Methylprednisolone Sodium Succinate Injection USP 500mg x 1 Vial",
        "value":{
            "qty":{"sum":100},
            "price":{"sum":44576},
            "category": {"valueList":["CORTICOSTERIODS"]}
        }
    }
]
  

Спасибо.