Javascript:使用 reduce() 将频率转换为百分比?

Javascript: Converting frequencies to percentages using reduce()?

我的代码中的一个函数接受一个数字数组,并将这些数字的第一位数字和它们在数组中出现的次数放入映射中。例如,对于

的数组
[1539, 1390, 1023, 2642, 3912, 7419, 7129, 9520, 2239]

生成的地图将是

{"1" => 3, "2" => 2, "3" => 1, "7" => 2, "9" => 1}

对于我现在正在处理的功能,我必须获取生成的地图并将其转换为具有百分比的地图。然而问题是,我必须使用 reduce() 和 map() 函数。

到目前为止,我只知道如何像以前一样实际计算物理频率,但我不知道如何使用 reduce() 将它们全部转换为百分比。到目前为止,这是我的代码:

function toPercentages(benfordMap) {
    let keys = [ ...benfordMap.keys()];
    let values = [ ...benfordMap.values()];

values.reduce(
    (acc, currVal) => {
    // do something
  })

    return values;
}

我对要做什么有一个一般的想法,我觉得我可以使用我用来计算频率的代码,但我不知道如何合并句法。我的频率代码如下所示:

function freqs(items) {
var Frequencies = new Map();
items.reduce(
    (acc, currVal) => (
        acc[currVal] = ++acc[currVal] || 1, acc
    ),
    {}
  );

for (var x in items){
    Frequencies.set(x, items[x]);
}

return Frequencies;
}

我对 Javascript 太陌生了,所以我不知道我应该在 reduce() 函数中的什么地方添加百分比计算代码。谁能指出我正确的方向?

我不确定,我理解正确,但无论如何请检查下面的代码:

var obj = {"1": 3, "2": 2, "3": 1, "7": 2, "9": 1}

function toPercentages(obj){
  let m = new Map()
  const sum = Object.keys(obj).reduce( (acum, item) => {   
      return acum + obj[item];
  }, 0);
  
  Object.keys(obj).map( key => {
    m.set(key, ((obj[key]/sum) * 100).toFixed(2));    
  })
  
  return m;
}

toPercentages(obj);