Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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_Arrays - Fatal编程技术网

Javascript 数组的累积和,条件在另一个数组中

Javascript 数组的累积和,条件在另一个数组中,javascript,arrays,Javascript,Arrays,我需要执行数组的累积和。在某些情况下,我需要它是直截了当的,并且发现这段代码非常有用: cumul = sum.reduce(function (a, n) { a.push((a.length > 0 ? a[a.length-1] : 0) + n); return a; }, [initial]); cumul.shift(); Logger.log(

我需要执行数组的累积和。在某些情况下,我需要它是直截了当的,并且发现这段代码非常有用:

cumul = sum.reduce(function (a, n) { 
                       a.push((a.length > 0 ? a[a.length-1] : 0) + n); 
                       return a;
                   }, [initial]);
cumul.shift();
Logger.log(cumul);

当我记录“cumul”时,我得到了我需要的结果。但是,在其他IF()条件下,如果满足另一个包含日期的数组中的某个条件,则需要执行累积求和-如果日期,因为循环在Javascript中非常快,并且可以创建各种类型的循环 条件和的定义

下面的函数ccSum()接受两个参数,一个数据数组和一个条件数组。 如果条件为真,则对数据求和

function ccSum(data, condition){
   var r = [];
   r[0] = (condition[0])? data[0]: 0;  
   for(i=1,l=data.length; i<l; ++i) r[i] = r[i-1] + ( (condition[i])? data[i]: 0 );
   return r
}
函数ccSum(数据、条件){
var r=[];
r[0]=(条件[0])?数据[0]:0;

因为(i=1,l=data.length;i你把自己的生活搞得太艰难了,所有这些都在推动、减少和改变

函数运行\u总计(数组,初始化){
返回数组
.map(函数(v,i){返回v==3?0:v;})//过滤掉3
.map(函数(v){return init+=v;})
;
}

document.writeln(运行_-total([1,2,3,4,5],0));
我的第一个建议是将两个数据结构压缩为一个。
var-arr=[{val:7,日期:'2014-10-31'},{val:3,日期:'2014-11-01'}]
然后遍历一个数据结构。由于
javascript
数组不是真正的数组,因此这样做不会造成性能损失。对于非条件累积和,请参阅——可能会重用某些类型的循环结构和帮助函数。这返回[1,3,3,7,12]。是否有一种方法可以让函数跳过给定迭代中的值,但在下一次迭代中计算它是否符合条件?例如,在本例中,我希望这是结果:[1,3,3,10,15]。谢谢!当然有一种方法,它是一台计算机,所以你只需对它进行编程即可。你需要另一个变量来跟踪未添加的值,以便以后可以将其添加回。对,我的意思是,如果有一种方法可以使用此方法实现这一点:)如果您能提供更多的指导,对JavaScript来说非常新。再次感谢。添加一个名为“pending”的新变量。对于过滤掉并设置为零的值,将它们添加到该挂起变量中。然后,在第二个映射函数中,如果值非零,则添加回pending(并将其重置为零)但是什么是现实世界中需要运行所有这些的情况呢?不能完全让它工作;当我尝试将它重新添加到!==0时,它也会将前2个值增加3。我能得到的最接近的结果是:函数running_total(array,init){var pend=0;return array.map(function(v){return v==3?(pend=v,0):v;}).map(函数(v){return v==0?(init+=pend,pend=0):init+=v;});}但这将返回[1,3,0,10,15]。如何使0成为以前的值?