Сортировка элементов списка по сложным критериям в скрипте приложений Google - PullRequest
0 голосов
/ 23 апреля 2020

Мне нужен способ группировки людей, которые зарегистрировались в этой форме, и ответы go на лист в этой электронной таблице . (Это копия, которую вы можете прокомментировать)

Джеймс Хетфилд ----- с 10 утра ------ до 5 вечера
Джо Роган ---------- из 12:00 ------ до 3:00
Алекс Вебстер ------- с 1:00 ------- до 4:00
Элон Маск --------- - с 9 вечера ------- до 10 вечера
(вот образец электронной таблицы Я сделал с именами и временем, как я хотел бы использовать, имеет 90 записей)
Каждая группа состоит из наставника и ученика, каждый наставник кем-то, а также чей-то наставник, то есть, что у любого данного пользователя будет назначенное лицо А для наставничества пользователя, а человек В будет пользователь mentee. (Мне трудно объяснить это ясно, извините.) Если приведенный выше пример списка был организован должным образом, то Джеймс наставлял, как, кто будет наставником Алекса, кто будет наставником Элона, кто будет наставником Джеймса. чтобы каждые 2 недели переставлять всех с учетом следующих факторов:

  1. Их «доступное время» соответствует как минимум одному часу.
  2. Они не были рядом с каждым заказ до.
  3. У каждого есть и наставник, и ученик.

- Для помощи с пунктом 1 я выяснил эту формулу, чтобы проверить временные рамки между двумя пользователями: if Min (ATimeOut) , BTimeOut) -Max (ATimeIn, BTimeIn)> = 1h, тогда они совпадают.
-Чтобы помочь с пунктами 2 и 3, я создал скрипт, который создает новый лист пользователя, в котором эти статистические данные будут регистрироваться каждые 2 недели.

Я хотел бы создать функцию после выполнения все пользователи перестраиваются с этими правилами наиболее эффективным способом, а если кто-то не может быть связан, скажите мне, чтобы я сделал это вручную.

Спасибо за советы и идеи, ребята! Я работал над этой идеей без перерыва и нашел стену, которую, кажется, не могу пересечь!

Вот мой код: BTW, так как я не программист, но я хочу сделать этот проект любой ценой я создал список шагов, которые, как мне кажется, привели бы к желаемому результату, который объясняет странное комментирование

function pairingUsers() {

  //var commonTime = Math.min(uTimeTo,UbTimeTo)-Math.max(UTimeFrom,UbTimeFrom);
//retrieve an actualized list of users

/*
I found easier to add a =count()function in the spreadsheet to see what is the
last row of that column than create the loop, that's userNum.I don't know if this is a no no.
*/
  var userNum = wsData.getRange("D2").getValue(); 
  var userList = wsData.getRange(2, 3, userNum).getValues();

//for each user(U) in that list:  
  for(i=0; i< userNum; i++){
    var user = userList[i][0];
    var userSheet = ws.getSheetByName(user);
    //Logger.log(user);

//create new from date to date cells in his sheet
    var dateRow = userSheet.getRange("G2").getValue() + 2;
    var firstDate = wsData.getRange("E2").getValue();
    var lastDate = wsData.getRange("F2").getValue();

    //userSheet.getRange(dateRow, 3).setValue(firstDate);
    //userSheet.getRange(dateRow, 4).setValue(lastDate);    
//check if hasMe = false
    var usrMe = userSheet.getRange("U2").getValue();
    if(usrMe == false){
//retrieve User RL
      var userRLLength = userSheet.getRange("I2").getValue();
      if (userRLLength == 0){
        userRLLength=1
      }
      var userRL = userSheet.getRange(2, 8, userRLLength).getValues();
//check if the next user (Ub) is in the RL
      var nextUser = userList[i+1][0];
      for(f=0;f>userRLLength;f++){
        if(

      }

    }

  }
  /* 
  if yes, skip
  if not:
      check if U and Ub time are a match

      if yes:
        check if Ub hasMr = False
        if yes:

         mark A Me to TRUE
         mark B Mr to True
         logg U in Ub as mentor
         logg Ub in U  as mentee
   if no more users in the list, start from the top
   if  there are no matches
   log the user name

   check that every user hasmentor and hasmentee are True
   if not logg user name  
  */


}

В этот момент я подумал, что, возможно, я слишком усложняю все просто не зная функции или более оптимального способа сделать это, а также что я просто не знаю, что мне следует изучать дальше, потому что мне кажется, что теперь мне придется начать создавать временные массивы внутри для l oop и хранить их для последующего использования, и это неожиданно немного перегружает. Любая рекомендация будет оценена, есть ли более простой способ сделать это ?, как вы могли бы решить эту проблему? пожалуйста, задавайте мне любые вопросы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...