Почему неправильный вывод после объявления переменной в цикле?- (WrongQuestion: Как использовать Promises в рекурсивном методе для объявления переменной?) - PullRequest
0 голосов
/ 20 октября 2018

Этот вопрос основан на этом: Как добавить суммированный список в рекурсивном методе?

На этот раз я хотел вычислить среднее значение resultObject.Поэтому я создал resultlist со всеми element.val числами в нем, и как только цикл forEach закончился, tempuserlist повторяется и вычисляется среднее значение.

Этот средний объект затемновый result.Этот пример показывает только маленький пример моего набора данных.Для большого набора данных существуют проблемы с асинхронностью.Я пробовал обещания, но не знаю, как их использовать.У кого-нибудь есть идея?

function somefunc(obj) {
   let temp = {};  
   let tempuserlist = [];
   for (var key in obj) {
      if (obj.hasOwnProperty(key)) {
         if(!obj[key].hasOwnProperty("userlist")) {
            somefunc(obj[key]);
         }
         obj[key].userlist.forEach(function(element) {
            if (!temp.hasOwnProperty(element.name)){
              tempuserlist.push(temp[element.user] = { user: element.user});
              temp[element.user].resultlist = [];
              temp[element.user].val= 0;
            } temp[element.name].resultlist.push(element.val);
         });
         for (const user in tempuserlist) {
              tempuserlist[user].val= Math.round(tempuserlist[user].val/ tempuserlist[user].resultlist.length);
         }
      }
   }
   obj.userlist = tempuserlist;
}

1 Ответ

0 голосов
/ 21 октября 2018

Ладно, ребята,

Пока я готовил небольшой пример, я заметил свою глупую ошибку ... среднее значение не должно вычисляться в цикле ... в противном случае среднее значение вычисляетсяснова и снова ... Извините, похоже, мой вопрос не имеет никакого отношения к обещаниям и асинхронному программированию.По крайней мере, результат теперь в порядке, и я пока не чувствую ничего асинхронного поведения;)

Я все равно благодарю вас за желание помочь мне.Тем не менее ваши предложения помогли мне взглянуть на вещи с другой точки зрения и не зацикливаться на этих обещаниях.

function somefunc(obj) {
   let temp = {};  
      let tempuserlist = [];
      for (var key in obj) {
         if (obj.hasOwnProperty(key)) {
            if(!obj[key].hasOwnProperty("userlist")) {
               somefunc(obj[key]);
            }
            obj[key].userlist.forEach(function(element) {
               if (!temp.hasOwnProperty(element.name)){
                 tempuserlist.push(temp[element.user] = { user: element.user});
                 temp[element.user].resultlist = [];
                 temp[element.user].val= 0;
               } temp[element.name].resultlist.push(element.val);
            });
         }
      }
      for (const user in tempuserlist) {
        tempuserlist[user].val= Math.round(tempuserlist[user].val/ tempuserlist[user].resultlist.length);
      }
      obj.userlist = tempuserlist;
   }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...