Javascript拼接对象而不是数组

时间:2016-05-05 12:49:12

标签: javascript node.js object

出现了很多混乱,所以我把这个问题改写得更清楚了。我将描述如何处理请求的整个过程,但是这个问题只与过程的第一部分有关。

我有一个名为requests的对象,它被初始化为空。我的node.js服务器中的其他模块添加了以下格式的请求对象:

requests["name of request"] = {
    requestType: "type of request",
    parameters: {
        "request parameters here"
    },
    callback: function(data){//Do stuff with the data}
}

以下是处理此类请求的方法。

所有请求必须调用速率受限的外部JSON API。我可以将个别请求分组到大小为1-40的组中,无论组的大小如何,它只会被视为针对我的速率限制的1个请求。因此,为了最大化我对速率限制的使用,我应该尝试制作尽可能大的组,同时不要延迟单个请求的处理。

由于最大组大小为40,我需要从requests对象获取40个请求,然后将其复制到名为inProgressRequests的第二个对象中,保持所有剩余对象不变。然后我想删除它们以防止请求被多次处理。

完成此操作后,我可以调用外部API,一次处理所有40个请求。我批量接收数据,然后我必须将数据分成40个部分。然后,我需要将正确的数据部分作为data参数返回到正确请求的回调函数。

如果我要使用数组然后为每个数据块(其中有40个),我将不得不循环遍历数组以找到正确的请求,然后将其数据块返回给它。这将要求我在阵列中循环总共40次,这是低效的。因此我决定使用一个对象,因为我可以更有效地访问每个请求,如下所示:requests[requestName]

因此,除非有一种更有效的方法来搜索无序数组中的请求对象,否则不能使用数组。

我的问题是,我执行处理请求的第一部分的时间和资源最有效的方法是什么?也就是说,从requests对象获取前40个单独的请求对象然后从requests对象中删除它们的最有效方法是什么?

1 个答案:

答案 0 :(得分:1)

是的,你可以通过

删除对象的请求
delete requests[requestName]; 

这将删除此request对象的请求。

如果你想复制第一个和删除基于数组

的requestNames
requestNames.forEach( function( requestName ){
   secondRequests[ requestName ] = requests[ requestName ];
   delete requests[ requestName ];
});