Javascript嵌套循环推送到数组
我对编程比较陌生,在一个项目中遇到了一些问题Javascript嵌套循环推送到数组,javascript,node-red,Javascript,Node Red,我对编程比较陌生,在一个项目中遇到了一些问题 msg.newCG2 = []; for(i=0;i<msg.newCG.length;i++){ for(j=0;j<msg.campaignGroup.length;i++){ if(msg.campaignGroup[j].col10 === msg.newCG[j]){ msg.groupTotals = msg.groupTotals + msg.campaignGroup[j].
msg.newCG2 = [];
for(i=0;i<msg.newCG.length;i++){
for(j=0;j<msg.campaignGroup.length;i++){
if(msg.campaignGroup[j].col10 === msg.newCG[j]){
msg.groupTotals = msg.groupTotals + msg.campaignGroup[j].col11;
}
msg.newCG2.push(msg.newCG[i], msg.groupTotals)
}
}
msg.newCG2=[];
for(i=0;i在第二个for循环中有一个输入错误,推送需要在外循环中进行
msg.newCG2 = [];
for(i=0;i<msg.newCG.length;i++){
for(j=0;j<msg.campaignGroup.length;j++){
if(msg.campaignGroup[j].col10 === msg.newCG[i]){
msg.groupTotals = msg.groupTotals + msg.campaignGroup[j].col11;
}
}
msg.newCG2.push(msg.newCG[i], msg.groupTotals)
}
msg.newCG2=[];
对于(i=0;i
msg.newCG2 = [];
for (i=0; i < msg.newCG.length; i++) {
var groupTotal = 0;
for (j=0; j < msg.campaignGroup.length; j++) {
if (msg.campaignGroup[j].col10 === msg.newCG[i]){
groupTotal = groupTotal + msg.campaignGroup[j].col11
}
}
msg.newCG2.push(groupTotal)
}
msg.newCG2=[];
对于(i=0;i
与其循环120万次,不如在4000个活动组上使用一次循环,按id分组,为所有id创建一个总计数组,效率更高——我喜欢使用reduce()
函数来实现这一点:
var cgMap = msg.campaignGroups.reduce(function(arr, grp) {
var grpid = grp.col10;
var count = grp.col11;
var total = arr[grpid] || 0;
arr[grpid] = total + count;
},
[]);
我知道,reduce(…)函数不是最简单的函数,但它接受第二个arg(空数组)并将其与每个活动组对象一起依次传递给该内联函数。结果应该是一个简单的组总数数组(从col11
),由组id(从col10
)索引
现在,只需返回在msg.newCG
中找到的300个ID的总数,这个map()
函数就可以为我们做到这一点:
var cgOut = msg.newCG.map(function(gid) {
return cgMap[gid]; // lookup the total by group id
}
);
我在这里做了一些假设,比如组ID不是非常大的整数,并且间隔很近(不是太稀疏)。从原始代码中,我无法确定您希望在msg.newCG2
中返回的数据的格式。最终的push()
函数将在数组中附加2个整数——输出组id和该组的总计。在平面数组中交错组id和总计对不是一种非常有用的数据结构。也许您想将总值放入一个数组中,由组id索引?如果是,您可以将该行重新写入:
msg.newCG2[msg.newCG[i]]=msg.groupTotals;
看起来,无论条件是否为真,您都在将每条消息推送到数组中。条件只是设置了一个变量。此外,推送到两个循环中。非常感谢!您是否有时间更正此代码,以便我可以看到我的逻辑哪里出了问题?原始数组有多大一个是300个条目,另一个是4000个条目。谢谢!修复了输入错误,但仍然存在内存问题!