如何使用相同的键对对象值求和并返回一个对象?

use*_*175 2 javascript arrays object

我试图根据数组的每个对象中可用的选定键来对对象值求和.我的问题是如何处理percentage rate.在下面的代码示例中,satisfaction_rate应该有48.

我的输出应该是:

{ 'students' : 87, 'books': 32, 'satisfaction_rate': 48 }

const myData = [
  {
  'students' : 30,
  'books': 10,
  'satisfaction_rate': "60%",
  'returning_students': 14
  }, {
'students' : 25,
'books': 8,
'satisfaction_rate': "45%",
'returning_students': 14
  }, {
'students' : 32,
'books': 14,
'satisfaction_rate': "39%",
'returning_students': 19
  }
];


const keysToConsider = ['students', 'books', 'satisfaction_rate'];

function getSumOrAvgValuesOfKeys(data){
      const obj = {};
      let val = 0;
      keysToConsider.forEach(el => {
        data.forEach(element => {
          if (typeof(element[el] === 'string')) {
            val += parseInt(element[el], 10);
          } else {
            val += element[el];
          }
      });
        obj[el] = val;
        // Reset value
        val = 0;
    });
    return obj;
  }
  
console.log(getSumOrAvgValuesOfKeys(myData));
Run Code Online (Sandbox Code Playgroud)

Nen*_*car 5

您可以使用reduce方法,然后在最后一次迭代中计算每个元素的平均值,其中value是字符串的类型.

const myData = [{"students":30,"books":10,"satisfaction_rate":"60%","returning_students":14},{"students":25,"books":8,"satisfaction_rate":"45%","returning_students":14},{"students":32,"books":14,"satisfaction_rate":"39%","returning_students":19}]

const keys = ['students', 'books', 'satisfaction_rate'];

const result = myData.reduce((r, e, i, a) => {
  keys.forEach(k => r[k] = (r[k] || 0) + parseInt(e[k]));
  if(!a[i + 1]) Object.keys(e)
    .filter(k => typeof e[k] == 'string')
    .forEach(k => r[k] /= myData.length)
  return r;
}, {})

console.log(result)
Run Code Online (Sandbox Code Playgroud)