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)
您可以使用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)