平均值(nodeJs)
Average value (nodeJs)
我有一个如下所示的猫鼬模式:
const ratesSchema = new Schema({
voter: {
type: Schema.Types.ObjectId, ref: 'User'
},
project: {
type: Schema.Types.ObjectId, ref: 'Project'
},
votes:{
participant:{
type: Schema.Types.ObjectId, ref: 'User'
},
criteria1: Number,
criteria2: Number,
criteria3: Number,
criteria4: Number,
criteria5: Number,
criteria6: Number,
criteria7: Number,
criteria8: Number,
criteria9: Number,
criteria10: Number,
criteria11: Number,
criteria12:String,
average: Number
}
})
在表达中,我试图根据前 10 个标准和第 11 个标准的平均比率计算每个参与者的平均值:
const avg = (args) => args.reduce((a, b) => a + b) / args.length;
router.post('/:id/rate', isLogedIn, catchAsync(async(req, res, next) => {
const{project, voter, participants, criteria1, criteria2, criteria3, criteria4, criteria5, criteria6, criteria7, criteria8,criteria9, criteria10, criteria11, criteria12} = req.body
for(let i= 0; i < participants.length; i++){
const rate = new Rates({
project,
voter,
votes:{
participant: participants[i],
criteria1: criteria1[i],
criteria2: criteria2[i],
criteria3: criteria3[i],
criteria4: criteria4[i],
criteria5: criteria5[i],
criteria6: criteria6[i],
criteria7: criteria7[i],
criteria8: criteria8[i],
criteria9: criteria9[i],
criteria10: criteria10[i],
criteria11: criteria11[i],
criteria12: criteria12[i],
average: avg([avg([criteria1[i], criteria2[i], criteria3[i], criteria4[i], criteria5[i], criteria6[i], criteria7[i], criteria8[i], criteria9[i], criteria10[i]]), criteria11[i]])
}
})
console.log(rate.votes.average)
}
res.send('hi')
}));
问题是,如果所有标准都被评为 8,则它不会算作平均正确率
它将计算平均值为:4444444
谁能帮我解决这个问题(我是编程新手)
您应该将您的数据转换为 int
您正在添加 criteria1[i] 作为字符串而不是 int
你应该通过 parseInt()
将它转换为 int
有两种方法
1 :
const avg = (args) => args.reduce((a, b) => parseInt(a) + parseInt(b)) / args.length;
2 :
avg([avg([parseInt(criteria1[i])...), parseInt(criteria11[i]])) // do it for all criteria
我有一个如下所示的猫鼬模式:
const ratesSchema = new Schema({
voter: {
type: Schema.Types.ObjectId, ref: 'User'
},
project: {
type: Schema.Types.ObjectId, ref: 'Project'
},
votes:{
participant:{
type: Schema.Types.ObjectId, ref: 'User'
},
criteria1: Number,
criteria2: Number,
criteria3: Number,
criteria4: Number,
criteria5: Number,
criteria6: Number,
criteria7: Number,
criteria8: Number,
criteria9: Number,
criteria10: Number,
criteria11: Number,
criteria12:String,
average: Number
}
})
在表达中,我试图根据前 10 个标准和第 11 个标准的平均比率计算每个参与者的平均值:
const avg = (args) => args.reduce((a, b) => a + b) / args.length;
router.post('/:id/rate', isLogedIn, catchAsync(async(req, res, next) => {
const{project, voter, participants, criteria1, criteria2, criteria3, criteria4, criteria5, criteria6, criteria7, criteria8,criteria9, criteria10, criteria11, criteria12} = req.body
for(let i= 0; i < participants.length; i++){
const rate = new Rates({
project,
voter,
votes:{
participant: participants[i],
criteria1: criteria1[i],
criteria2: criteria2[i],
criteria3: criteria3[i],
criteria4: criteria4[i],
criteria5: criteria5[i],
criteria6: criteria6[i],
criteria7: criteria7[i],
criteria8: criteria8[i],
criteria9: criteria9[i],
criteria10: criteria10[i],
criteria11: criteria11[i],
criteria12: criteria12[i],
average: avg([avg([criteria1[i], criteria2[i], criteria3[i], criteria4[i], criteria5[i], criteria6[i], criteria7[i], criteria8[i], criteria9[i], criteria10[i]]), criteria11[i]])
}
})
console.log(rate.votes.average)
}
res.send('hi')
}));
问题是,如果所有标准都被评为 8,则它不会算作平均正确率 它将计算平均值为:4444444
谁能帮我解决这个问题(我是编程新手)
您应该将您的数据转换为 int
您正在添加 criteria1[i] 作为字符串而不是 int
你应该通过 parseInt()
将它转换为 int
有两种方法
1 :
const avg = (args) => args.reduce((a, b) => parseInt(a) + parseInt(b)) / args.length;
2 :
avg([avg([parseInt(criteria1[i])...), parseInt(criteria11[i]])) // do it for all criteria