是否可以将具有相同键的多个javascript对象添加到关联数组中?
我正在开发一个Javascript web应用程序(SPA),在后端使用RESTful api。在我的客户端数据上下文中,我想将对象添加到模型图中,然后立即将整个图发送到服务器 假设以下示例: 我的模型中有一个是否可以将具有相同键的多个javascript对象添加到关联数组中?,javascript,associative-array,single-page-application,Javascript,Associative Array,Single Page Application,我正在开发一个Javascript web应用程序(SPA),在后端使用RESTful api。在我的客户端数据上下文中,我想将对象添加到模型图中,然后立即将整个图发送到服务器 假设以下示例: 我的模型中有一个Person对象,它本身有一个sayPhoneNumbers数组作为属性。现在,我从api加载一个Person,用于编辑,并将其映射到我的模型。假设我想将一些电话号码对象添加到我的PhoneNumbers。为此,我将id为零的每个数字(例如,{“id”:0,“number”:6536652
Person
对象,它本身有一个sayPhoneNumbers
数组作为属性。现在,我从api加载一个Person
,用于编辑,并将其映射到我的模型。假设我想将一些电话号码对象添加到我的PhoneNumbers
。为此,我将id为零的每个数字(例如,{“id”:0,“number”:6536652226}
)添加到我的客户机模型中,并在用户单击“保存”时将整个图形发送到服务器。在服务器中,我将id为零的对象(新对象)添加到id自动递增的数据库中
我正在做一个基于教程的项目。他们这样做是为了向上下文添加对象:
var items = {},
// returns the model item produced by merging json obj into context
mapJsonToContext = function (json) {
var id = mapper.getJsonId(json);
var existingItem = items[id];
items[id] = mapper.fromDto(json, existingItem); //returns the mapped obj
return items[id];
},
add = function (newObj) {
items[newObj.id()] = newObj;
}
问题是,如果我使用这种方法,我将无法通过id删除客户端中新添加的尚未保存的项,因为所有id都为零
有什么建议可以解决这个问题,或者我需要一种完全不同的方法吗?在新创建的客户端对象上创建一个
localId
属性,并在协调服务器返回的数据时将其用作密钥。显然,服务器必须将此localId
返回给您。首先,我发现了两个小小的误解:
1) 忘记“关联数组”吧。数字数组是您仅有的一种数组;其他构造只是“对象”(这不是PHP)
2) 如果它是JSON,那么它是一个字符串,而不是一个对象
除此之外,您当然可以使用任意值来表示“new”(尽管我可能会使用null
而不是0
),只要您不使用该值来唯一标识尚未添加的项。例如,这很好:
[
{"id": 0, "number": "6536652226"},
{"id": 0, "number": "9876543210"},
{"id": 0, "number": "0123456789"}
]
这不是:
// WRONG!!!!
{
0: "6536652226",
0: "9876543210",
0: "0123456789"
}
}
当然,如果数字仍然没有ID,则无法按ID查找数字。您需要选择:
- 从DB中检索生成的ID并更新本地数据
- 按编号删除