我想创建一个函数,用以下数据进行一些数组操作(见下文)。想知道是否有一种巧妙的方法可以使用map/forEach或Reduce?
function calculateTotalSelections {
"selections":[
{
"item_selected": 1,
},
{
"item_selected": 3,
},
{
"item_selected": 4
},
{
"item_selected": 4
},
{
"item_selected": 1567486585
},
{
"item_selected": 1567486585
}
]
}
返回一些输出,如
项目4被选中两次
选中项目1
项目1567486585在后被选中
(约束:项目选择可能未知)
尝试通过迭代创建此地图
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 }