有很多困惑,所以我重写了问题以使其更加清晰。我将描述请求处理的整个流程,但是这个问题只涉及流程的第一部分。
我有一个名为 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
参数返回到正确请求的回调函数。
如果我要使用数组,那么对于每个数据 block (其中有 40 个),我必须循环遍历数组以找到正确的请求,然后将其数据 block 返回给它。这需要我总共循环遍历数组 40 次,效率很低。因此我决定使用一个对象,这样我就可以更有效地访问每个请求,如下所示:requests[requestName]
因此,除非有一种更有效的方法来在我没有想到的无序数组中搜索请求对象,否则使用数组不是一个选择。
我的问题是,执行处理请求的第一部分最节省时间和资源的方法是什么?也就是说,对我来说,从 requests
对象中获取前 40 个单独的请求对象,然后从 requests
对象中删除它们,最有效的方法是什么?
最佳答案
是的,您可以通过执行以下操作从对象中删除请求
delete requests[requestName];
这将从该 request
对象中删除该请求。
如果你想先复制并根据数组中的requestNames删除
requestNames.forEach( function( requestName ){
secondRequests[ requestName ] = requests[ requestName ];
delete requests[ requestName ];
});
关于Javascript 拼接对象而不是数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37051078/