使用map/reduce计算总数



我想创建一个函数,用以下数据进行一些数组操作(见下文)。想知道是否有一种巧妙的方法可以使用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 }

最新更新