使用 map/reduce 计算总数
Using map/reduce to calculate totals
我想创建一个函数来对以下数据进行一些数组操作(见下文)。想知道使用 map/forEach 或 Reduce 是否有一种巧妙的方法?
function calculateTotalSelections {
"selections":[
{
"item_selected": 1,
},
{
"item_selected": 3,
},
{
"item_selected": 4
},
{
"item_selected": 4
},
{
"item_selected": 1567486585
},
{
"item_selected": 1567486585
}
]
}
returns 一些输出像
item 4 was selected twice
item 1 was selected once
item 1567486585 was selected once
(约束:项目选择可以是未知的)
尝试通过迭代创建此地图
var output = {};
selections.forEach(function(val){
var value = val["item_selected"];
output[value] = output[value] || 0;
output[value]++;
});
现在output
有每个值的频率
您可以使用 reduce
创建一个以项目 ID 为键,以它们的频率为值的对象。
selections.reduce(function(frequencies, item){
if (!item.item_selected) return frequencies;
frequencies[item.item_selected] = (frequencies[item.item_selected] || 0) + 1;
return frequencies;
}, {});
// --> { '1': 1, '3': 1, '4': 2, '1567486585': 2 }
我想创建一个函数来对以下数据进行一些数组操作(见下文)。想知道使用 map/forEach 或 Reduce 是否有一种巧妙的方法?
function calculateTotalSelections {
"selections":[
{
"item_selected": 1,
},
{
"item_selected": 3,
},
{
"item_selected": 4
},
{
"item_selected": 4
},
{
"item_selected": 1567486585
},
{
"item_selected": 1567486585
}
]
}
returns 一些输出像
item 4 was selected twice
item 1 was selected once
item 1567486585 was selected once
(约束:项目选择可以是未知的)
尝试通过迭代创建此地图
var output = {};
selections.forEach(function(val){
var value = val["item_selected"];
output[value] = output[value] || 0;
output[value]++;
});
现在output
有每个值的频率
您可以使用 reduce
创建一个以项目 ID 为键,以它们的频率为值的对象。
selections.reduce(function(frequencies, item){
if (!item.item_selected) return frequencies;
frequencies[item.item_selected] = (frequencies[item.item_selected] || 0) + 1;
return frequencies;
}, {});
// --> { '1': 1, '3': 1, '4': 2, '1567486585': 2 }