Javascript 从现有JSON对象数组创建空JSON对象

Javascript 从现有JSON对象数组创建空JSON对象,javascript,arrays,json,object,angularjs,Javascript,Arrays,Json,Object,Angularjs,我有一个JSON对象和一个对象的两个数组x 我正在使用angularJS,我想在JSON中添加/编辑/删除对象(就像Angular.org上的Angular TODO应用程序示例一样) 有没有办法创建一个新的空(结构为x但没有值)JSON对象x,并将其推送到上面的JSON对象数组中 如何创建x的空值JSON对象 我的示例对象x粘贴在下面(我将所有值置零)。所以我的JSON就是这些对象的数组。在Angular中,我希望用户填写表单并将数据保存在这种类型的空对象中,然后将其推送到数组中。这是我的目标

我有一个JSON对象和一个对象的两个数组
x

我正在使用angularJS,我想在JSON中添加/编辑/删除对象(就像Angular.org上的Angular TODO应用程序示例一样)

有没有办法创建一个新的空(结构为
x
但没有值)JSON对象
x
,并将其推送到上面的JSON对象数组中

如何创建
x
的空值JSON对象

我的示例对象x粘贴在下面(我将所有值置零)。所以我的JSON就是这些对象的数组。在Angular中,我希望用户填写表单并将数据保存在这种类型的空对象中,然后将其推送到数组中。这是我的目标

示例JSON

      [{
        "id": null,
        "title": "",
        "date": {},
        "billPayerId": null,
        "notes": "Sample Notes",
        "billFinances": {
            "billPayerId": null,
            "billItemEntry": [
                {
                    "itemDescriptionId": 1,
                    "itemDescription": "",
                    "userIdAndLiableCost": [
                        {
                            "userId": null,
                            "liableCost": null
                        },
                        {
                            "userId": null,
                            "liableCost": null
                        }
                    ]
                },
                {
                    "itemDescriptionId": null,
                    "itemDescription": "",
                    "userIdAndLiableCost": [
                        {
                            "userId": null,
                            "liableCost": null
                        },
                        {
                            "userId": null,
                            "liableCost": null
                        }
                    ]
                }
            ],
            "billTotal": null
        },
        "groupId": null
    }];

可以使用对象文字来存储所需的任何内容。它只是一包属性(即名称)和值。e、 g.
var顺序={}

然后可以使用数组文字来保存这些命令<代码>例如var订单=[];命令。推送(命令) 但似乎你需要某种验证。可能需要一些东西来管理订单数据和处理验证等,如:

orderManager.dataStore = {
  _data: {},
  //_redundantData = [];  //could easily store in an array if id isn't unique
  get: function (id) {
    return this._data[id];
  },
  getAll: function () {
    return this._data;
  },
  set: function (id, order) {
    validateOrder(order);
    this._data[id] = order;
  },

  clear: function (id) {
    this._data[id] = undefined;
  },
  add: function (order) {
      validateOrder(order);
      this._data[order.id] = order;

  },
  assertNotNull: function (data, key) {
      if(data[key] == undefined) {
        throw new Error("Key Missing: " + key + " for " + data.name);
      }
  },
  validateOrder: function(order) {
    assertNotNull(order,"id");
    assertNotNull(order,"title");
    //etc
  },
  containsOrder: function (id) {
    for(var i=0;i<array.length;i++) {
        if(array[i].id === id) {
            return true;
        }
    }
    return false;
  }
};
orderManager.dataStore={
_数据:{},
//_redundantData=[];//如果id不唯一,则可以轻松存储在数组中
获取:函数(id){
返回此。_数据[id];
},
getAll:function(){
返回此。\u数据;
},
设置:功能(id、顺序){
确认订单(订单);
此._数据[id]=订单;
},
清除:功能(id){
此._数据[id]=未定义;
},
新增:功能(订单){
确认订单(订单);
此._数据[order.id]=订单;
},
assertNotNull:函数(数据、键){
if(数据[键]==未定义){
抛出新错误(“缺少键:“+Key+”表示“+data.name”);
}
},
validateOrder:函数(顺序){
资产不为空(订单,“id”);
资产不为空(订单,“所有权”);
//等
},
ContainesOrder:函数(id){

对于(var i=0;i如果我读的都是正确的,我想你可能误解了Angular是如何工作的。你不必为Angular创建一个空对象来在表单中使用。只要表单的输入使用点符号,当用户用数据填充输入时,它就会为你生成对象

例如

现在,通常在用户单击“保存”后,您会将数据发送到服务器进行持久化,然后您可以清空对象(例如,
$scope.myForm={};
)来重置表单。但是,出于某种原因,您希望先构建一个数组,然后在完全完成后将整个内容发送到服务器(至少我是这样理解的)

要做到这一点,您必须绕开JavaScript中的
对象
数组
都是引用类型这一事实,因此您不能将满是数据的对象推到数组中,然后清空对象以重置表单,因为这也会清空数组中的对象,从而破坏数据存储

我个人会用Angular的对象复制方法(例如,
Angular.copy(source);
)解决这个问题,如下所示:这允许您创建对象的非引用副本并使用它,而无需更改原始对象。因此,在“保存函数”中,您将具有以下功能:

var myNewObj = angular.copy($scope.myForm);
myDataArray.push(myNewObj);
$scope.myForm = {};

这样,您就保存了完整的表单数据,将其推送到数组并清除了表单的输入数据。这是否回答了您的问题?

您一直在使用“json对象”这个词。我不认为这意味着你认为它意味着什么。:我认为我没有使用正确的术语,但我的意思是我有一个JSON变量,它包含一个object x类型的数组。希望它现在有意义…你可以始终创建一个“模板”json对象,并在将其推入数组时重新使用它。@user1324816:您是在谈论序列化数据结构还是实际的JavaScript数据结构?我真的无法从您的问题中分辨出来。空的“json对象”看起来像
“”
在JavaScript中。对不起。我只发布我的json对象。否则,我会把所有人都弄糊涂。讨厌有人对我做同样的事情。谢谢。这绝对是有帮助的!
$scope.myForm = {
    name: 'Justin',
    email: 'justin@email.com',
    nickname: 'Cerebrl'
};
var myNewObj = angular.copy($scope.myForm);
myDataArray.push(myNewObj);
$scope.myForm = {};