Javascript 从现有JSON对象数组创建空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中,我希望用户填写表单并将数据保存在这种类型的空对象中,然后将其推送到数组中。这是我的目标
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订单=[];命令。推送(命令)但使用另一个id为属性的对象文字同样容易
但似乎你需要某种验证。可能需要一些东西来管理订单数据和处理验证等,如:
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 = {};