#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"]}
}
}
]
Спасибо.