Среднее значение (NodeJS)

#javascript #mongodb #average

Вопрос:

У меня есть схема мангуста, которая выглядит так:

 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
  }
})
 

и в express я пытаюсь рассчитать среднее значение для каждого участника на основе их средних показателей по первым 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

Может ли кто-нибудь помочь мне решить проблему (я новичок в программировании)

Комментарии:

1. Вам нужно передать 0 в качестве второго аргумента reduce вызова метода.

Ответ №1:

вы должны преобразовать свои данные в int то, что вы добавляете критерии 1[i] как строку, а не int. вы должны преобразовать их в int, используя parseInt() два способа 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
 

Комментарии:

1. Если мой ответ поможет вам, я буду признателен, если вы примете мой ответ:)