是否可以将具有相同键的多个javascript对象添加到关联数组中?

是否可以将具有相同键的多个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

我正在开发一个Javascript web应用程序(SPA),在后端使用RESTful api。在我的客户端数据上下文中,我想将对象添加到模型图中,然后立即将整个图发送到服务器

假设以下示例:

我的模型中有一个
Person
对象,它本身有一个say
PhoneNumbers
数组作为属性。现在,我从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并更新本地数据
  • 按编号删除

为什么不让服务器返回递增的版本,然后进行处理?a)没有“关联数组”,存在无序对象b)不,您将无法添加一个密钥twice@ben336为了实现这一点,我应该将每个子项添加到我的模型中,并将其保存到数据库中。然后,如果用户想要取消编辑模型,该怎么办?我应该再次点击服务器并删除新添加的子项,我认为这是没有效率的,只要当用户决定保存整个模型对象时,我可以立即发送整个图形。从数据库检索生成的ID并更新您的本地数据:为了实现这一点,将每个子项添加到我的模型中,我应该将其保存到数据库。然后,如果用户想要取消编辑模型,该怎么办?当用户决定保存整个模型对象时,我应该再次点击服务器并删除新添加的子对象,我认为这是没有效率的,只要我能立即发送整个图形。当然,它们上面都没有数字属性。@Pejman-如果我误读了一些内容,很抱歉,我读到了“API”并认为这些内容被发送到了服务器。@Pejman-如果不是所有项目都有可识别的标签,那么删除这些内容的GUI是什么样子的?