JavaScript:我们如何在数组中推送数组?

时间:2018-05-05 07:09:42

标签: javascript arrays json

我面临一个小问题的问题。我想使用JavaScript for循环以下面的格式创建一个JSON数组。

var payloadTest = {
        "people": [{
                "pic": "sap-icon://employee",
                "name": "Ravi",
                "role": "team member",
                "appointments": [{
                        "start": new Date("2017", "0", "21", "0", "0"),
                        "end": new Date("2017", "0", "21", "23", "59"),
                        "title": "Meet John Miller"
                    }, {
                        start: new Date("2017", "0", "18", "0", "0"),
                        end: new Date("2017", "0", "18", "23", "59"),
                        title: "Team meeting",
                    }]
            ]
        }
    };

我尝试使用for循环下面的代码。但它没有用。

var itemsArr = [];
var headArr = [];
for (var i = 0; i < resultSet.length; i++) {
    var obj = {};
    var itm={};
    itm.pic="sap-icon://employee";
    itm.name=resultSet[i].Rowlabel;
    itm.role=resultSet[i].RowId;
    headArr.push(itm);

    obj.start=resultSet[i].Begda;
    obj.end=resultSet[i].Endda;
    obj.title=resultSet[i].RowId;
    obj.type="Type02";
    obj.tentative=false;
    itemsArr.push(obj);
    //headArr.push(itemsArr);
}
payloadTest.people = headArr;
payloadTest.people.appointments = itemsArr;

有人可以帮助我使用上述JSON格式的for循环创建一个数组。

注意::约会数组计数可能会根据来自后端的结果而增加

2 个答案:

答案 0 :(得分:2)

在:

payloadTest.people.appointments = itemsArr;

您正在尝试将约会数组指定为一组人的属性。相反,您应该将其指定为(或每个?)个人的财产。

所以你可以这样做:

payloadTest.people[0].appointments = itemsArr;

但这只会给一个人一系列的约会。从您的代码中不清楚您是否希望每个人都引用(或复制)相同的约会数组,一个人拥有它,或者您是否认为您为每个人创建了单独的数组。要做到以后,你需要一个嵌套循环。

<强>更新

您可能希望在循环内移动itemsArr的声明/初始化,以便每个人都有自己的数组(否则,对每个人的数组都会对一个人的约会数组进行修改)

然后,您可能希望使用唯一的测试数组初始化它们 - 所以嵌套循环(例如从0到i的j),为每个人创建递增的更大的约会列表。但是因为它只是测试您正在创建的数据,所以它真的取决于您所属的内容。

答案 1 :(得分:1)

根据以下代码更改您的代码

for (var i = 0; i < resultSet.length; i++) {
        var obj = {};
        var itm={};
        itm.pic="sap-icon://employee";
        itm.name=resultSet[i].Rowlabel;
        itm.role=resultSet[i].RowId;
        headArr.push(itm);

        obj.start=resultSet[i].Begda;
        obj.end=resultSet[i].Endda;
        obj.title=resultSet[i].RowId;
        obj.type="Type02";
        obj.tentative=false;
        itemsArr.push(obj);
        itm.appointments = itemsArr;  // Added
        //headArr.push(itemsArr);
    }
    payloadTest.people = headArr;
    /*payloadTest.people.appointments = itemsArr;*/  // Removed

删除

payloadTest.people.appointments = itemsArr;

因为它不向每个人分配人数组的约会。您必须为每个人记录添加约会以在循环中添加

itm.appointments = itemsArr;

请参阅以下代码段进行多次约会。我使用虚拟数据。 根据您的数据格式进行更改。

&#13;
&#13;
var headArr = [];
  var payloadTest = [];

  var resultSet = [{'Rowlabel' : 'Ravi', 'RowId' : 'team member', 'appointments' :[{'Begda' : 'test', 'Endda' : '1'}, {'Begda' : 'test', 'Endda' : '1'}]}, {'Rowlabel' : 'name', 'RowId' : '1', 'appointments' : [{'Begda' : 'test', 'Endda' : '1'}]}];
  
  for (var i = 0; i < resultSet.length; i++) {
      var itm={};
      itm.pic="sap-icon://employee";
      itm.name=resultSet[i].Rowlabel;
      itm.role=resultSet[i].RowId;

      var itemsArr = [];
      for (var j = 0; j < resultSet[i].appointments.length; j++) {
          var obj = {};
          obj.start=resultSet[i].appointments[j].Begda;
          obj.end=resultSet[i].appointments[j].Endda;
          obj.title=resultSet[i].RowId;
          obj.type="Type02";
          obj.tentative=false;
          itemsArr.push(obj);
      }
      itm.appointments = itemsArr;  // Added
      
      headArr.push(itm);
  }
 
  
  payloadTest.people = headArr;
  /*payloadTest.people.appointments = itemsArr;*/  // Removed
  
  console.log(headArr);
&#13;
&#13;
&#13;

希望它有所帮助。