减少 jquery 选择器获得的结果

cip*_*her 5 javascript jquery

我使用的代码看起来像这样:

$(document).ready(function() {
  var total = $('#exam-percent-weightage > td > input').not('[type=hidden]').not('[disabled=disabled]').get().reduce(function(a, b) {
    return specialParseFloat(a === undefined ? 0 : a.value) + specialParseFloat(b === undefined ? 0 : b.value);
  });
  console.log(total);
});
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<tr id="exam-percent-weightage">
  <td class="weightagePadding"> <strong>First Term</strong> 
  </td>
  <td>
    <input name="data[Exam][0][percent_weightage]" class="form-control percentWeight" value="0.00" step="any" id="Exam0PercentWeightage" type="number">
    <input name="data[Exam][0][id]" class="testId" value="30" id="Exam0Id" type="hidden">
  </td>
  <td>&nbsp;%</td>
  <td class="buttonPadding">+</td>
  <td class="weightagePadding"> <strong>Second Term</strong> 
  </td>
  <td>
    <input name="data[Exam][1][percent_weightage]" class="form-control percentWeight" value="0.00" step="any" id="Exam1PercentWeightage" type="number">
    <input name="data[Exam][1][id]" class="testId" value="31" id="Exam1Id" type="hidden">
  </td>
  <td>&nbsp;%</td>
  <td class="buttonPadding">+</td>
  <td class="weightagePadding"> <strong>Third Term</strong> 
  </td>
  <td>
    <input name="data[Exam][2][percent_weightage]" class="form-control percentWeight" value="0.00" step="any" id="Exam2PercentWeightage" type="number">
    <input name="data[Exam][2][id]" class="testId" value="32" id="Exam2Id" type="hidden">
  </td>
  <td>&nbsp;%</td>
  <td>&nbsp;&nbsp;<strong>=</strong> 
  </td>
  <td>
    <input class="form-control" disabled="disabled" id="total-weight" type="number">
  </td>
  <td>&nbsp;%</td>
  <td class="buttonPadding">
    <button type="submit" class="action-mainbtn">Save</button>
  </td>
</tr>
Run Code Online (Sandbox Code Playgroud)

注意:我必须使用的 jQuery 版本实际上是 1.12.1(SO 片段工具中不可用)

仅供参考:我已经定义了specialParseFloat,错误可能与此无关。无论如何,函数如下:

function specialParseFloat(something) {
    return parseFloat(something) || 0;
}
Run Code Online (Sandbox Code Playgroud)

我在浏览器(FF)中得到的行为是,reduce 仅返回最后一个值,而不是添加输入框中的所有值。然而,这在只有两个输入的情况下可以正常工作。

我做错了什么?

cip*_*her 0

感谢Bastien Mercier,我重新阅读了文档。我做错了两件事。

首先,我假设 params 是reduce(firstValue, secondValue)我太愚蠢了),而应该是(accumulator, currentValue)

其次,我没有传递初始值,根据文档,这会导致索引从 1 开始。

现在的更正将更改为a === undefined ? 0 : a.valuea === undefined ? 0 : a只是a(因为我们传递初始值)并传递初始值 0 以强制reduce从数组中的第 0 个位置开始。