Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript嵌套循环推送到数组_Javascript_Node Red - Fatal编程技术网

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个条目。谢谢!修复了输入错误,但仍然存在内存问题!