2014-02-21 90 views
0

我正在構建動態svg calendar bar。爲了計算酒吧需要多少個分區(以幾個月爲基礎),我將酒吧的總寬度除以日期差異以確定每個分區中應該有多少個像素。需要增加js數組中的值

基本例如: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; 
} 

你罰款人可能已經被大加讚賞的任何想法!

+3

'leftPositionsArray.push(leftPositions * i);'? –

+0

這也適用。好吧,我會在我開始發佈愚蠢的問題之前確保我喝更多的咖啡。謝謝你侮辱我! –

回答

0

如果再加陣列leftPositions那麼最後一個值,將可以解決你的問題

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

因此,我認爲你應該能夠做到以下幾點

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

假設cb_dateDiff是3在你的例子中從上面

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

+1,因爲這是你的評論,它是...很好。大聲笑 –

+0

我不認爲這會奏效,因爲你永遠不會去'我=== 3',因爲你使用的是小於或小於或等於 – jwags

+0

@jwags:因爲我們不知道什麼'cb_dataDiff的價值實際上,然後沒有。 –

0

答案最初由馬特Burland提供:

leftPositionsArray.push(leftPositions * i); 

感謝馬特和其他人。