【问题标题】:How do I add numerical values of a JSON array object?如何添加 JSON 数组对象的数值?
【发布时间】:2021-06-13 16:05:48
【问题描述】:

我正在尝试将此 Array 对象中的这些整数值相加以得到总和,进而得到平均值。

Input: [
        {"string": "John", "integer": 7},
        {"string": "Margot", "integer": 8},
        {"string": "Jules", "integer": 4},
        {"string": "Marco", "integer": 19}
       ]

Output: 9.5

我已经能够执行此功能,但是,我无法将整数中的值添加到 sum 变量中并除以 objectName.length。我的示例代码在下面,我想了解它为什么不起作用?

function my_average_mark(student_grades) {
    sum = 0;
    for( i = 0; i < student_grades.length; i++){
        // console.log(student_grades[i].integer);
        sum += student_grades[i].integer;
        console.log(sum);
        
    }
    
};


all_grades = [
        {"string": "John", "integer": 7},
        {"string": "Margot", "integer": 8},
        {"string": "Jules", "integer": 4},
        {"string": "Marco", "integer": 19}
       ]
console.log(my_average_mark(all_grades));

【问题讨论】:

  • 请注意,您不会从函数中返回任何内容,因此最后一个日志不会显示任何内容
  • 正如@Nick 已经提到的为什么它不起作用的单线解决方案是这样的console.log(Input.reduce((n, {integer}) =&gt; n + integer, 0)/Input.length)
  • @PatrickEvans 实际上我最后的日志打印了一些东西。但它正在为我的整数值加起来。尼克的建议有所帮助。谢谢。

标签: javascript arrays json dictionary object


【解决方案1】:
function my_average_mark(student_grades) {
    sum = 0;
    for( i = 0; i < student_grades.length; i++){
        sum += student_grades[i].integer;        
    }
    return sum / student_grades.length;
};

考虑使用 map 和 reduce 等数组函数

function my_average_mark(student_grades) {
    sum = student_grades.map(p => p.integer).reduce((a,b) => a+b, 0)
    return sum / student_grades.length;
};

【讨论】:

    【解决方案2】:

    你的代码几乎是对的,你只需要将return的和除以长度即可:

    function my_average_mark(student_grades) {
      let sum = 0;
      let len = student_grades.length;
      for (let i = 0; i < len; i++) {
        sum += student_grades[i].integer;
      }
      return Math.round(sum * 10 / len) / 10;
    };
    
    
    all_grades = [
            {"string": "John", "integer": 7},
            {"string": "Margot", "integer": 8},
            {"string": "Jules", "integer": 4},
            {"string": "Marco", "integer": 19}
           ]
    console.log(my_average_mark(all_grades));

    请注意,您应该始终使用varletconst 声明变量。

    【讨论】:

    • @AsanteMichael 我修改了您的编辑以使用Math.round 舍入到小数点后一位;使用toFixed 意味着该函数将返回一个字符串而不是一个数字。
    猜你喜欢
    • 2017-08-04
    • 1970-01-01
    • 2011-11-21
    • 2020-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-01
    • 2020-07-02
    相关资源
    最近更新 更多