Я целый день копаюсь, чтобы понять это. Впервые в javascript Мне нужно создать WebApp с использованием GAS для моей команды, и я застрял в построении своих объектов / массивов.
У меня есть 2 источника данных (таблицы Google). Первый источник данных - это классический c 2D-массив с именем dbProject
, который при консольировании дает следующую структуру: {{…}, {…}, {…}, {…},…}. Например, project[0]
возвращает {id: “id0”, projectCreatedBy: “fred”}
.
Каждый из этих проектов имеет минимум одну фазу, но может иметь и больше. Каждая фаза построена аналогично. В этом примере фаза содержит информацию о логистике и команде.
Второй источник данных dbPhase
записывает события проекта, относящиеся к фазе 1 проекта, такие как добавление новой фазы в проект, добавление членов команды или логистика c информация о фазе и т. д. Этот источник данных менее структурирован, чем первый, и похож на этот (извините за плохое форматирование):
Id *% projectId% phaseId% typeOfEvent% pty1% pty2% pty3% pty4
0% 0% 0% phase% title00% aDate00% bDate00% status0
1% 0% 0% team% fred% mng% fred @% empty% empty
2% 0% 0% team% nick% wkr% nick @% empty% empty
3% 1% 0% phase% title10% aDate10% bDate10% status0
4 % 1% 0% логистика% ny% US% NA% empty% empty
5% 1% 1% phase% title11% date11% date11% status0
6% 0% 1% логистика % par% FR% EU% empty% empty
7% 1% 1% team% mike% hr% mike @% empty% empty
Данные добавляются в таблицу на временной основе (самое последнее событие в последней строке), что означает, что их нельзя отсортировать для изменения порядка. Каждую строку, представляющую событие для данной фазы данного проекта, я решил структурировать, создав объект для каждого кода typeOfEvent. Мои объекты закодированы следующим образом:
function phase(){
this.title = ‘ ’ ;
this.aDate = ‘ ’ ;
this.bDate = ‘ ’ ;
this.status = ‘ ’ ;
}
function logistics (){
phase.call(this);
this.address = ‘ ’;
this.city = ‘ ’;
this.continent = ‘ ’;
}
logistics.prototype = Object.create(phase.prototype);
logistics.prototype.constructor = logistics;
function team(){
phase.call(this);
this.name = ‘ ’;
this.role = ‘ ’;
this.email = ‘ ’;
}
team.prototype = Object.create(project.prototype);
team.prototype.constructor = team;
Внутри dbPhase.map()
я читаю код typeOfEvent и динамически вызываю подходящий объект и свойство (одно из приведенных выше), а затем «добавляю» его. на dbProject
следующим образом:
dbPhase.map(function (row){
//oObject is one of the above structure
eval("var myObject = new " + oObject);
for (var property in myObject) {
eval('myObject.' + property + " = row[" + property + "]");
};
dbProject[idProject]][typeOfEvent] = myObject
}
Это работает нормально, пока структурированные объекты не складываются, и в этом случае они переопределяют предыдущие (например, id * 2 и 3: добавление typeOfEvent для того же паттерна проекта / фазы. Это сохранит только информацию id * 3; id * 3 и 5: добавление новой фазы. Опять же, это сохранит только информацию из id * 5;…).
Мой запрос: я хочу sh иметь такую структуру:
dbProjects (idProject) .phase (idPhase) .typeOfEvent.property?
ex: dbProjects (0) .phase (1) .logisti c .pt1, чтобы вернуть «ny», например: dbProjects (0) .phase (0) .team.pt2, чтобы вернуть массив {fred @; nick @}
Я использую javascript только месяц и еще не освоил все различия между массивами, объектами и т. д. c ... Целый день пробовал разные вещи ( pu sh, assign, скобки, круглые скобки, ...) и отчаянно безуспешно искать в Интернете (возможно, не используя правильную формулировку). Я также просматривал следующие посты, полагая, что ответы там скроются. Однако я понятия не имею, как организовать эти решения для моего случая (я продолжаю думать, что было бы намного проще, если бы таблица dbPhase могла быть отсортирована - но это невозможно).
Angular2, Typescript: Добавить объект в массив объектов массива объектов объекта
Добавить новый объект в объект другого объекта
Возможно, я мог бы сделать быстрые и грязные циклы а сортировки динамически по sh результатам? Но в идеале я бы предпочел чистый код. Ваша помощь будет более чем приветствоваться. Заранее благодарим за советы.