Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将对象的新对象作为数组添加到数组_Javascript_Arrays_Object - Fatal编程技术网

Javascript 将对象的新对象作为数组添加到数组

Javascript 将对象的新对象作为数组添加到数组,javascript,arrays,object,Javascript,Arrays,Object,为了弄明白这一点,我一整天都在苦苦挣扎。javascript新手我需要为我的团队制作一个使用GAS的WebApp,我一直在构建我的对象/数组 我有两个数据源(谷歌表格)。第一个数据源是一个名为dbProject的经典二维数组,它在执行控制台时提供以下结构:{{{…},{…},{…},{…},{…},{…},}项目[0]例如,返回{id:“id0”,projectCreatedBy:“fred”} 每个项目至少有一个阶段,但可以有更多的阶段。每个阶段的结构相似。在本例中,阶段包含后勤和团队信息 第

为了弄明白这一点,我一整天都在苦苦挣扎。javascript新手我需要为我的团队制作一个使用GAS的WebApp,我一直在构建我的对象/数组

我有两个数据源(谷歌表格)。第一个数据源是一个名为
dbProject
的经典二维数组,它在执行控制台时提供以下结构:{{{…},{…},{…},{…},{…},{…},}<代码>项目[0]例如,返回
{id:“id0”,projectCreatedBy:“fred”}

每个项目至少有一个阶段,但可以有更多的阶段。每个阶段的结构相似。在本例中,阶段包含后勤和团队信息

第二个数据源
dbPhase
记录与一个项目的阶段相关的项目事件,如向项目中添加新阶段、向阶段中添加团队成员或后勤信息等。此数据源的结构不如第一个数据源,与此类似(很抱歉格式错误):

Id*%projectId%phaseId%typeOfEvent%pty1%pty2%pty3%pty4

0%0%0%阶段%title00%aDate00%bDate00%status0

1%0%0%team%fred%mng%fred@%empty%empty

2%0%0%团队%nick%wkr%nick@%empty%empty

3%1%0%阶段%10%标题10%日期10%B日期10%状态0

4%1%0%物流%ny%US%NA%empty%empty

5%1%1%阶段%11%date11%date11%status0

< P > 6% 0%物流1% %PAR %FR% EU%空%空/P> 7%1%1%团队%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;中的信息)

我的问题:我希望有这样一个结构:

dbProjects(idProject).阶段(idPhase).事件类型.property

例如:dbProjects(0).阶段(1).logistic.pt1返回“ny” 例如:dbProjects(0).phase(0).team.pt2返回一个{fred@;nick@}数组

我使用javascript才一个月,还没有掌握数组、对象等之间的所有差异。。。整天都在尝试各种各样的事情(推送、分配、括号、括号等),拼命在网上搜索却没有成功(可能没有使用正确的措辞)。我也一直在看下面的帖子,我想答案会隐藏在里面。然而,我不知道如何为我的案例安排这些解决方案(我一直认为,如果dbPhase表可以排序,会容易得多——但它不能)

我也许可以快速而肮脏的循环和排序来动态推送结果? 但理想情况下,我更喜欢干净的代码。你的帮助将非常受欢迎。提前感谢您的提示。

基于

dbProjects(idProject).phase(idPhase).typeOfEvent.property
似乎您希望将其保留为嵌套对象,而不是添加内部数组

所以dbProject看起来像

const dbProject = {
  "id0": {
    phase: {}, 
    logistics: {}, 
    team: {}
  },
  "id1": {
    phase: {}, 
    logistics: {}, 
    team: {}
  },
  ...
}
那么

dbProject[idProject]][typeOfEvent] = myObject
应改写为

//first line not needed if hard coded as default
if(!dbProject[idProject]][typeOfEvent]) dbProject[idProject]][typeOfEvent] = {};
dbProject[idProject]][typeOfEvent][yourKey] = myObject
您的关键在于您希望如何将特定日志与其他相同类型的日志区分开来。第二个数据源中的每个新日志是否都有唯一的id(引用日志而不是项目id的id)?。这将是一个很好的使用键,否则,如果您只是添加数字键,那么使用数组并将其重写为

//first line not needed if hard coded as default
if(!dbProject[idProject]][typeOfEvent]) dbProject[idProject]][typeOfEvent] = [];
dbProject[idProject]][typeOfEvent].push(myObject);
生成的dbProject现在看起来像

const dbProject = {
  "id0": {
    phase: [], 
    logistics: [], 
    team: []
  },
  "id1": {
    phase: [], 
    logistics: [], 
    team: []
  },
  ...
}
每个日志都作为

dbProject[idProject][typeOfEvent][index]
基于

dbProjects(idProject).phase(idPhase).typeOfEvent.property
似乎您希望将其保留为嵌套对象,而不是添加内部数组

所以dbProject看起来像

const dbProject = {
  "id0": {
    phase: {}, 
    logistics: {}, 
    team: {}
  },
  "id1": {
    phase: {}, 
    logistics: {}, 
    team: {}
  },
  ...
}
那么

dbProject[idProject]][typeOfEvent] = myObject
应改写为

//first line not needed if hard coded as default
if(!dbProject[idProject]][typeOfEvent]) dbProject[idProject]][typeOfEvent] = {};
dbProject[idProject]][typeOfEvent][yourKey] = myObject
您的关键在于您希望如何将特定日志与其他相同类型的日志区分开来。第二个数据源中的每个新日志是否都有唯一的id(引用日志而不是项目id的id)?。这将是一个很好的使用键,否则,如果您只是添加数字键,那么使用数组并将其重写为

//first line not needed if hard coded as default
if(!dbProject[idProject]][typeOfEvent]) dbProject[idProject]][typeOfEvent] = [];
dbProject[idProject]][typeOfEvent].push(myObject);
生成的dbProject现在看起来像

const dbProject = {
  "id0": {
    phase: [], 
    logistics: [], 
    team: []
  },
  "id1": {
    phase: [], 
    logistics: [], 
    team: []
  },
  ...
}
每个日志都作为

dbProject[idProject][typeOfEvent][index]