Javascript Arrays - 确保每个批次都有一个元素

时间:2016-05-13 14:34:50

标签: javascript object dictionary

我有一个电子邮件脚本,它从数据库中读取电子邮件并将它们收集到一个巨大的对象中。现在这些电子邮件可以是BCC,CC,TO类型的电子邮件,必须通过各自类型的API传递给我们的电子邮件提供商。

他们的API允许批量最多1000封电子邮件,这不是问题。问题是,在每个批次中,我必须至少有一个TO地址。换句话说,一个批次偶然有一个1000'BCC'类型的电子邮件,而不是一个'TO'类型的电子邮件地址。那1000封电子邮件将不会被发送。当您处理20,000封电子邮件时,会创建20个批次,并且很可能是一个包含所有BCC或CC类型电子邮件的批次,其中没有一个是TO类型地址。

所以我的问题是如何在处理过程中确保每个批次中的TO地址?

一些代码和当前输出在下面。

 while (addresses.length > 0) {

     // I do some processing here. The addresses above is a map of emails that
     // Something like: [ { label: 'to', address: 'jay@someaddress.com' } ]. 

     // Then the processing removes the individual labels from each email and slams
     // them into one key value for each email type using a filter function. We also
     // append some other things that must be separated as well like the recipient
     // variables. The sent information looks like this to our email provider. 
     {
         from: 'jay99@someaddress.com',
         subject: 'fff',
         text: 'fff',
         to: ['jay+3@someaddress.com', 'jay+8@someadd.com'],
         bcc: [],
         * * // WHAT happens here if all the email addresses reside here and none above in the 'TO' label? The email will fail. The code must ensure at least one 'TO' type address in each batch of 1000.**
         cc: [],
         'recipient-variables': {
             'jay+3@someaddress.com': {},
             'jay+8@someadd.com': {}
         }
     }

 }

我最初的想法是将它随机化一些,但不知道该怎么做。我认为在将电子邮件放入正确的插槽(IE类型的电子邮件)之前,你几乎必须对初始数组做一些事情。建议?并感谢您抽出宝贵时间阅读我的问题。 :)

1 个答案:

答案 0 :(得分:1)

随机化这些组合也无法解决您的问题,因为它并不能保证所有批次中都有“收件人”。

解决此问题的一种方法是创建收件人桶,一个包含所有“收件人”,另一个包含所有其他收件人。鉴于您拥有完整的地址列表,这应该不会太难。

然后总是拿一个'到'地址和999个其他地址,将它们打包成一批并发送给它们。重复,直到其中一个桶为空。如果其他桶首先是空的,只需将剩余的“收件人”收起并发送电子邮件,直到它们全部消失为止。

如果你的'to'桶先是空的,你将不得不想出一个不同的解决方案。也许弥补虚拟收件人?