【问题标题】:Javascript - How to get the sum of the index[1] elements from a 2D arrayJavascript - 如何从二维数组中获取索引 [1] 元素的总和
【发布时间】:2013-02-01 19:17:48
【问题描述】:

正在为我的开发课程做家庭作业。 我的部分问题需要我创建一个多维数组 (2D) 并从每个嵌套数组中获取第二个元素的总和。我怎样才能做到这一点?这是我的数组:

var studentGrades = [['Bob', 85], ['Jim', 76], ['Steve', 92], ['Sue', 83], ['Liz', 65], ['Jack', 77], ['Jo', 96], ['Tim', 80], ['Mike', 53], ['John', 81]];

我需要把所有的数字加在一起。 我知道它们的索引是 [1],但我不知道如何编写代码来将它们加在一起。

【问题讨论】:

标签: javascript


【解决方案1】:

您必须使用 for 循环 i(项目)做一些事情,并将 count 变量放在 for 循环之外。比使用索引1 作为计数,因为这是数字。

这应该可以帮助你完成作业。

更多信息

  1. For loop

【讨论】:

    【解决方案2】:
    var sum = 0;
    for(var x=0; x<arr.length; x++)
        sum += arr[x][1];
    

    您只需使用 2 个索引括号,尽管第二个索引将始终为 1。这是不安全的,因为多维数组可以是锯齿状的,因此没有固定的第二维大小。

    var sum = 0;
    for(var x=0; x<arr.length; x++)
        if(arr[x].length >= 2)
            sum += arr[x][1];
    

    在每次迭代中检查内部数组的长度是更安全的方法。

    【讨论】:

    • 这是作业。你不应该给别人做作业。你应该把它们放在正确的方向
    • Niels 我很欣赏这一点,但这只是一个更大问题的一部分。接下来我必须取 index[1] 元素的总和,得到它们的平均值,然后使该平均分数等于字母等级,例如 77 = C,或 85 = B....
    • @Niels - 我总是从适当的解决方案中学到最好的东西,并伴随着适当的解释。如果你想用暗示来引诱人们,希望他们自己弄清楚,那很好(而且很多人似乎都同意这种观点),但并不是每个人都有时间这样做。没有一种绝对的“学习方式”。
    • 我还发了几次关于家庭作业的人问题答案。但是,如果您提供资源以轻松找到答案。人们可以通过做而不是复制/粘贴来学习,因为那是行不通的。此外,如果你没有时间做功课。你开始得太晚了。
    【解决方案3】:

    使用 ECMAScript5 Array.prototype.reduce 将您的数组减少到该总和,

    var sum = studentGrades.reduce(function(sum, pair) {
        return sum + pair[1];
    }, 0);
    

    用 ECMAScript6 arrow functions 美化它,

    var sum = studentGrades.reduce((sum, pair) => sum + pair[1], 0);
    

    【讨论】:

      【解决方案4】:

      二维数组只是数组的数组。在您更好地掌握它们之前,我建议您写出如何访问它们的网格。例如,数组 a 有 3 个元素,每个元素包含两个元素(我们称之为 b)。索引看起来像这样

      a0b0 a0b1 
      a1b0 a1b1
      a2b0 a2b1
      

      在你的情况下是

      [['Bob', 85],
      ['Jim', 76],
      ['Steve', 92]]
      

      所以要获得 Jims 的成绩,我们可以查看索引表,它是 a1b1,它转换为 studentGrades [1][1]。 要遍历双维数组,您先遍历行然后遍历列

      for(var row = 0; row < a.length; row++){
          var b = a[row];
          for(var column = 0; column < b.length; column++){
              var accesingByRowAndColumn = a[row][column];
              var accesingByColumn = b[column];
          }
      }
      

      如果您只是在学习,我不建议您将一堆代码放在一起来产生解决方案,从长远来看,您只会伤害自己。了解问题和解决问题的工具。我曾辅导过一些人,如果某个问题需要从书中的代码示例中稍作调整,他们会吓坏并且不知道该怎么做

      【讨论】:

      • 几个拼写问题...a)在循环中使用了“rows”,b)“b.lenght”中的长度拼写错误
      【解决方案5】:

      您可以使用Alasql JavaScript 库来做到这一点:

      var res = alasql('SELECT VALUE SUM([1]) FROM ?',[studentGrades]);
      

      试试这个例子at jsFiddle

      【讨论】:

        猜你喜欢
        • 2020-06-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-06
        • 1970-01-01
        • 2020-02-16
        • 2022-10-25
        相关资源
        最近更新 更多