Управлять массивом для получения коллекции объектов - PullRequest
0 голосов
/ 18 июня 2019

Я пытаюсь манипулировать массивом и застрял на том, как на самом деле это сделать.Я создал календарь в Google Sheets с помощью App Script, а затем извлекаю все события (то есть заметки ячеек), происходящие за заданный период времени, и хотел бы разделить данные, чтобы получить имя человека и все события, за которые он будет отвечать.

function getEvents(){ 
  var numRows = range.getNumRows(); 
  var numCols = range.getNumColumns(); 
  var trainingTable = [] 
  var note, cell 
  for (var i = 3; i <= numRows; i++) { 
    for (var j = 1; j <= numCols; j++) { 
      cell = range.getCell(i,j) 
      note = cell.getNote(); 

      //if the cell has a note push it into table
      if(note){ 
        trainingTable.push(note.split('\n')) 
        /* output 
        [ 
        [Ringo Starr, event 3, may 25], 
        [Paul McCartney, event 2, june 15], 
        [Ringo Starr, event X, february 2], 
        [George Harrison, event Y, may 25], 
        [Paul McCartney, event Z, june 15] 
        ] 
        up to 20 different people
        */
      } 
    } 
  } 
  for( var i in trainingTable ){
    // yes, what goes here?
    //how to distinct names and attach events to them
  }
}

Я хотел бы создать объект профиля для каждого человека и прикрепить события как свойства этих объектов, но как это сделать?

// Редактировать Как вы видите, Ринго Старр имеет два разных события, поэтому идеальным профилем будет: var person1 = {name: Ringo Starr, e1: [event 3, may 25] , e2: [event X, february 2] }

Спасибо за любой ответ.Лучший.

1 Ответ

0 голосов
/ 18 июня 2019

Поиск в массиве имени исполнителя. Если он не может найти его (-1), он создает новый объект p и добавляет его в массив профиля. Если он находит имя исполнителя, он просто добавляет новое событие и дату в соответствующие массивы в профиле художника.

        trainingTable = [ 
        ["Ringo Starr", "event 3", "may 25"], 
        ["Paul McCartney", "event 2", "june 15"], 
        ["Ringo Starr", "event X", "february 2"], 
        ["George Harrison", "event Y", "may 25"], 
        ["Paul McCartney", "event Z", "june 15"] 
        ] ;

        var profile = [];
        for(x=0; x<trainingTable.length; x++) {
            t = trainingTable[x];
            var nameIndex = profile.findIndex(n => n.name === trainingTable[x][0]);
            if(nameIndex === -1) { 
                p = {
                    "name" : trainingTable[x][0],
                    "event" : [trainingTable[x][1]],
                    "date" : [trainingTable[x][2]]
                }
                profile.push(p);
            } else {
                profile[nameIndex].event.push(trainingTable[x][1]);
                profile[nameIndex].date.push(trainingTable[x][2]);  
            }
        }

        var person1 = profile[0];
        console.log(person1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...