[英]Selecting a percentage % of a batch in FOR loop using javascript
我正在使用 javascript,我有一个循环来选择所有数据行。
每次的行数可能不同,我不想一次选择所有行。 我想以 10% 的批次获取行,以便性能更好。
目前我正在尝试这种方法,但需要您的建议,这是一种正确的方法还是有更好的方法?
var TenPercBatch = 0.1;
// for (i in data) {
for (var i = 0; i < data.length*TenPercBatch; ++i) {
var row = data[i];
var emailAddress = row[0]; // First column
var emailSent = row[1]; // Second column
if (emailSent != EMAIL_SENT) { // Prevents sending duplicates
//PRODUCTION EMAIL FORM LINK
var url = "https://www.mysiteformurl-endpoint.com";
UrlFetchApp.fetch(url + '&EMAILADDRESS=' + encodeURIComponent(emailAddress));
AudienceList.getRange(startRow + i, 2).setValue(EMAIL_SENT);
// Make sure the cell is updated right away in case the script is interrupted
SpreadsheetApp.flush();
}
}
根据行数,有时当我手动计算某些内容的 10% 时,我会得到十进制输出......比如 1000 行,10% 将是 100 ..但如果我有 5 行,10% 将是 0.5。 有没有办法只以非十进制最接近的数字获得输出,所以代码中没有问题?
就像...如果 10% 是 0.5 然后使用 1.....如果 10% 是 7.5 然后选择 8...等等...
是否可以?
另一个问题是 - 如何仅选择下一个 10%? 当我查看我的循环时,我认为它可能总是选择相同的 10% 批次。
在数学中,有一个函数被称为天花板,它总是将非整数四舍五入到下一个整数,例如Math.ceil(3) == 3
和Math.ceil(3.1) == 4
。
为了安全起见,您最好做这样的事情,尽管我不确定您为什么要这样做。
for(var a = 0; a < 10; a++)
{
for(var i = Math.floor(a*data.length*0.1); i < data.length && i < Math.ceil((a+1)*data.length*0.1); i++)
{
//do stuff within batch
}
//do stuff in between batches
}
内部循环迭代数据对象的第 a-10%。 如果您只想迭代前 10%,只需将 a 设置为 0 而不是外部 for 循环。
当然可以,使用Math.ceil( )
函数 :)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.