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

时间:2014-10-31 01:48:14

标签: 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);

当我登录&cum;'我得到了我需要的结果。但是,在其他IF()条件下,我需要执行累积和,在另一个包含日期的数组中提供某个条件 - 如果日期是< = X,则不要在此迭代中添加累积和(显示以前的累计值)。

任何想法如何实现?似乎使用这个版本的累积金额不会起作用,但我不确定会有什么其他方法可以解决这个问题。

提前致谢! ģ

2 个答案:

答案 0 :(得分:1)

For循环在Javascript中非常快,可以创建各种类型 条件总和。

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

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
}

通过更改第一轮condition[i]的方括号condition(i),可以很容易地重写此条件,其中条件是要调用的函数。或者,我们可以检查typeof(condition)==='function'并分支这两种情况。

答案 1 :(得分:1)

你在推动,减少和转移的过程中,对自己的生活太过艰难。

function running_total(array, init) {
    return array
        .map(function(v, i) { return v ===3 ? 0 : v; }) // filter out 3's
        .map(function(v)    { return init += v; })
   ;
}

document.writeln(running_total([1,2,3,4,5], 0));

要使过滤器属于另一个并行的日期数组,请将第一个地图函数更改为

之类的内容
function(v, i) { return dates[i] < cutoff ? 0 : v; }
相关问题