Javascript 分别得到每个数组的总和

Javascript get the sum of each array seperate

我一直在努力弄清楚如何正确执行此操作,而且我确定我是个白痴(这里是编码新手)。我有一个 xml 文件(如下所示),我正在解析并尝试基于节点 "testset" 为每个数据集构建多个 table。 xml 文件不会改变它的设计方式,但会增加 "testsets" 的数量。我有下面的代码。

我目前有 testpassed 和 testpassed 显示我需要的 2 个数组,但我无法弄清楚如何分别获得每个数组的总和(并预计未来会有未知数量的数组) 然后我必须将它写入 table。下面的代码目前在通过的测试中将数组的两个部分加在一起,我需要将它们分开。所以我希望数组设置为 137、70。非常感谢任何帮助或建议。

xml

<?xml version="1.0" encoding="utf-8"?>
<TestSets>
  <TestSet>
    <TestSetID>TestSet_iOS1</TestSetID>
    <Hardware>iPad Air 2</Hardware>
    <Version>iOS 8.3</Version>
    <Build>Pro 2.7.0.13 </Build>
    <Orientation>PORTRAIT</Orientation>
    <NumTestCases>46</NumTestCases>
    <NumTestScripts>17</NumTestScripts>
    <TotalTime>230891.363</TotalTime>
    <TestResults>
      <TestRun>
        <Date>24 Mar 2015 09:12:00</Date>
        <Hardware>iPad Air 2</Hardware>
        <Version>iOS 8.1.3</Version>
        <Build>2.7.0.607</Build>
        <Orientation>PORTRAIT</Orientation>
        <NumPassed>37</NumPassed>
        <NumFailed>31</NumFailed>
      </TestRun>
      <TestRun>
        <Date>27 Mar 2015 11:43:18</Date>
        <Hardware>iPad Air 2</Hardware>
        <Version>iOS 8.1.3</Version>
        <Build>Pro 2.7.0.615</Build>
        <Orientation>PORTRAIT</Orientation>
        <NumPassed>100</NumPassed>
        <NumFailed>25</NumFailed>
      </TestRun>
     </TestResults>
  </TestSet>
  <TestSet>
    <TestSetID>TestSet_iOS2</TestSetID>
    <Hardware>iPad Air 2</Hardware>
    <Version>iOS 8.1.3</Version>
    <Build>Pro 2.7.0.623</Build>
    <Orientation>LANDSCAPE</Orientation>
    <NumTestCases>38</NumTestCases>
    <NumTestScripts>9</NumTestScripts>
    <TotalTime>20800.255</TotalTime>
    <TestResults>
      <TestRun>
        <Date>30 Mar 2015 10:29:00</Date>
        <Hardware>iPad Air 2</Hardware>
        <Version>iOS 8.1.3</Version>
        <Build>2.7.0.615</Build>
        <Orientation>LANDSCAPE</Orientation>
        <NumPassed>34</NumPassed>
        <NumFailed>15</NumFailed>
      </TestRun>
      <TestRun>
        <Date>31 Mar 2015 20:00:02</Date>
        <Hardware>iPad Air 2</Hardware>
        <Version>iOS 8.1.3</Version>
        <Build>Pro 2.7.0.620</Build>
        <Orientation>LANDSCAPE</Orientation>
        <NumPassed>10</NumPassed>
        <NumFailed>19</NumFailed>
      </TestRun>
      <TestRun>
        <Date>02 Apr 2015 10:15:25</Date>
        <Hardware>iPad Air 2</Hardware>
        <Version>iOS 8.1.3</Version>
        <Build>Pro 2.7.0.623</Build>
        <Orientation>LANDSCAPE</Orientation>
        <NumPassed>26</NumPassed>
        <NumFailed>12</NumFailed>
      </TestRun>
    </TestResults>
  </TestSet>
</TestSets> 

当前代码

 document.write("<table><tr><th><st>Test Set ID</st></th><th>Hardware</th><th>Op Sys Version</th><th>App Build</th><th>Orientation</th><th>Number of Test Passed</th><th>Number of Test Failed</th></tr>");
var x = xml.getElementsByTagName("TestSet");
var sum = 0;
for (i = 0; i < x.length; i++) {
    document.write("<tr class='dynamictable'><td>");
    document.write(x[i].getElementsByTagName("TestSetID")[0].childNodes[0].nodeValue);
    document.write("</td><td>");
    document.write(x[i].getElementsByTagName("Hardware")[0].childNodes[0].nodeValue);
    document.write("</td><td>");
    document.write(x[i].getElementsByTagName("Version")[0].childNodes[0].nodeValue);
    document.write("</td><td>");
    document.write(x[i].getElementsByTagName("Build")[0].childNodes[0].nodeValue);
    document.write("</td><td>");
    document.write(x[i].getElementsByTagName("Orientation")[0].childNodes[0].nodeValue);
    var y = x[i].getElementsByTagName("TestRun");
    var testspassed = [];
    var testsfailed = [];
    for (j = 0; j < y.length; j++) {
        testspassed.push(y[j].getElementsByTagName("NumPassed")[0].childNodes[0].nodeValue);
        testsfailed.push(y[j].getElementsByTagName("NumFailed")[0].childNodes[0].nodeValue);
    }

    for (var k=0; k<testspassed.length; k++){
    sum+=testspassed[k]<<0;   
}
console.log(sum);        

}

可能不是最干净和最好的方法,但这是我为让它工作所做的:

document.write("<table><tr><th><st>Test Set ID</st></th><th>Hardware</th><th>Op Sys Version</th><th>App Build</th><th>Orientation</th><th>Number of Test Passed</th><th>Number of Test Failed</th></tr>");
      var x = xml.getElementsByTagName("TestSet");
      for (i = 0; i < x.length; i++) {
        testspassed = [];
        testsfailed = [];
        passedsum = 0;
        failedsum = 0;
        var y = x[i].getElementsByTagName("TestRun");
        for (j = 0; j < y.length; j++) {
          passed = (y[j].getElementsByTagName("NumPassed")[0].childNodes[0].nodeValue);
          failed = (y[j].getElementsByTagName("NumFailed")[0].childNodes[0].nodeValue);
          passedsum += passed << 0;
          failedsum += failed << 0;
        }
        document.write("<tr class='dynamictable'><td>");
        document.write(x[i].getElementsByTagName("TestSetID")[0].childNodes[0].nodeValue);
        document.write("</td><td>");
        document.write(x[i].getElementsByTagName("Hardware")[0].childNodes[0].nodeValue);
        document.write("</td><td>");
        document.write(x[i].getElementsByTagName("Version")[0].childNodes[0].nodeValue);
        document.write("</td><td>");
        document.write(x[i].getElementsByTagName("Build")[0].childNodes[0].nodeValue);
        document.write("</td><td>");
        document.write(x[i].getElementsByTagName("Orientation")[0].childNodes[0].nodeValue);
        document.write("</td><td>");
        document.write(passedsum);
        document.write("</td><td>");
        document.write(failedsum);
        document.write("</td></tr>");
      }