如何使我的javascript算法从平均值变为加权平均值?

时间:2019-06-27 14:58:37

标签: javascript arrays algorithm

我正在计算代表的成绩。如果他们的选票能保护海洋,那么他们的成绩就好;如果他们的选票没有保护,他们的情况就不好。我的算法运行良好。代表海洋的每票可得3分,反对海洋的票可得0分,弃权可得1分,缺席可得0.5分。然后,只要我想以%的比例使用,就可以将分数设为20或100。

我现在要做的是为每个法律类别计算一个加权平均值。例如,如果某法律类别中有3票,我希望它们在最终等级中的权重与具有1票其他法律类别中的权重相同。

我不确定该怎么做。但基本上,对于每个法律类别,我都希望发生以下代码:

const GetGrade = (id, votes, number) => {
  console.info("<<< GET GRADE id", id);
  console.info("<<< GET GRADE votes", votes);
  console.info("<<< GET GRADE number", number);

  const scale = number || 100;
  let points = 0;
  let numberOfVotes = 0;
  // for each votes.law.category I want the following to happen :
  for (var i = 0; i < votes.length; i++) {
    if (votes[i].deputy._id === id) {
      if (
        (votes[i].decision === "for" && votes[i].law.protect === true) ||
        (votes[i].decision === "against" && votes[i].law.protect === false)
      ) {
        points += 3;
        numberOfVotes += 1;
      }
      if (
        (votes[i].decision === "for" && votes[i].law.protect === false) ||
        (votes[i].decision === "against" && votes[i].law.protect === true)
      ) {
        points += 0;
        numberOfVotes += 1;
      }
      if (votes[i].decision === "absence") {
        points += 0.5;
        numberOfVotes += 1;
      }
      if (votes[i].decision === "abstention") {
        points += 1;
        numberOfVotes += 1;
      }
    }
  }
  const finalNote = Number(((points / (numberOfVotes * 3)) * scale).toFixed(0));
  return finalNote;
};

这是我用来计算等级的一系列投票的图像:

my array of objects to calculate a grade

0 个答案:

没有答案