jquery 平均为 NaN

jquery NaN on average

我想获得平均评价。 jQuery 的第一部分用于进度条动画,第二部分用于获取评论平均值。但是我的 console.log 给了我 NaN 我不知道为什么。

var avg = 0;
var amount = 0;

$(".review").each(function() {
  var progres = $(".progress-bar");
  progres.each(function() {
    avg = avg + parseInt($(".aria-valuenow").text());
    amount = amount + 1;
  });
});

avg = avg / amount;
console.log(avg);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="review">
  <span class="progressText"><B>review 1</B></span>
  <div class="progress">
    <div class="progress-bar w-75" role="progressbar" aria-valuenow="25" aria-valuemin="0" aria-valuemax="100"></div>
  </div>
  <span class="progressText"><B>review 2</B></span>
  <div class="progress">
    <div class="progress-bar w-75" role="progressbar" aria-valuenow="35" aria-valuemin="0" aria-valuemax="100"></div>
  </div>
  <p class="avg"></p>
</div>

您正在遍历所有进度条,但没有从该进度条中添加任何内容——回调函数从不使用 this 来获取当前元素。相反,它获取带有 class="aria-valuenow" 的元素的文本;那不是 class,它是进度条的一个属性 DIV。

我想你想要的是:

avg += parseInt($(this).attr("aria-valuenow"));

问题出在这行:

 avg=avg+parseInt($(".aria-valuenow").text());

不会起作用,因为你的语句意味着 从具有 aria-valuenow class 的元素中获取文本,而你实际上 aria-valuenow 是一个属性。因此该行应如下所示:

 avg += Number($(".progress-bar").prop("aria-valuenow"));

你得到 NaN 的原因(表示 NotANumber 的值)是因为所述行已扩展为以下内容:

avg += parseInt("")

parseInt("") 结果 NaN 以及任何进一步的总和 (NaN + 1 = NaN)