需要在js数组中增加值

时间:2014-02-21 16:48:28

标签: javascript arrays

我正在构建一个动态svg calendar bar。为了计算条形所需的分割数(以月为单位),我将条形的总宽度除以几个月的日期差异,以计算出每个分区中应该有多少像素。

基本示例:There are 3 months between the two provided dates; The calendar bar is 935 pixels wide. 935/3(rounded) = 312. Each section of the calendar bar should be approx 312 pixels wide.

现在出现问题。我正在使用一个基本循环来运行数学并将值推送到javascript数组。哪个工作正常。我想要做的是通过将数组中的每个后续值添加到先前的值来增加它。

示例:1st value is 312, second value is 614 (312+312), and the final value is 936(312+614) or (312+312+312) however the math has to work.

出于某种原因,我不能为我的生活弄清楚如何以这种方式推动价值观。

以下是我目前正在使用的代码。 (请注意,某些正在更新的变量可能会在脚本的其他位置声明)

function divideCalendarBar(){

    var calBarWidth = 935;  
    var calBarDivisions = Math.round(calBarWidth/cb_dateDiff);
    var leftPositions = calBarDivisions;
    var leftPositionsArray = new Array();

    for (var i = 1; i < cb_dateDiff; i++) {     
        leftPositionsArray.push(leftPositions);
    };

    cb_leftPositionsArray = leftPositionsArray;
}

非常感谢你们所喜欢的任何想法!

4 个答案:

答案 0 :(得分:4)

  

第一个值是312,第二个值是614(312 + 312),最终值是936(312 + 614)或(312 + 312 + 312)

所以你可以说你的第一个值是312 x 1,你的第二个值是312 + 312 = 312 x 2而你的第三个值是312 + 312 + 312 = 312 x 3

因为你已经有一个索引从1到(大概)3:

的循环
for (var i = 1; i < cb_dateDiff; i++) {     
    leftPositionsArray.push(leftPositions * i);
};

应该工作

答案 1 :(得分:2)

所以我认为你应该能够做到以下

for (var i = 1; i <= cb_dateDiff; i++) {     
    leftPositionsArray.push(leftPositions * i);
};

假设您的示例中cb_dateDiff为3

答案 2 :(得分:0)

如果我们将数组的最后一个值添加到leftPositions,那么它将解决您的问题

for (var i = 1; i < cb_dateDiff; i++) {    
     if(leftPositionsArray.length > 0){
         leftPositionsArray.push(leftPositions+[leftPositionsArray.length-1]); 
      }else{
           leftPositionsArray.push(leftPositions); 
      } 
};

答案 3 :(得分:0)

答案最初由Matt Burland提供:

leftPositionsArray.push(leftPositions * i);

感谢马特和其他所有人。