2017-05-04 47 views
-2

我有一個數組,如果它是第一個元素,我必須使用與數組中其餘元素相比的不同公式進行計算。問題是循環只能進入if條件並且不會進入else條件。如果數組中的第一個元素做別的事

不知道我是否做這個權利。

下面的代碼:

var days = 535; //user selection 
var val = 3; //user selection 
var baseDays = 182.5; 
var someValArr_1 = [12,16,23,31,33,34,39,45,49,54,59,62,62,so on]; //same for 2 other arrays 

var someValArrDiff_1 = diff(someValArr_1); //function to subtract two consecutive elements in array 

var noOfDays =[182.5,365,547.5,730,912.5,so on]; 

var arrayLength = noOfDays.length; 
for (var i = 0; i < arrayLength; i++) { 
    if(noOfDays[i] == noOfDays[0]) { //182.5 
     switch(val) { 
      case 1: 
       discount = days/noOfDays[i] * someValArrDiff_1[i]; 
       break; 
      case 2: 
       discount = days/noOfDays[i] * someValArrDiff_2[i]; 
       break; 
      case 3: 
       discount = days/noOfDays[i] * someValArrDiff_3[i]; 
       break; 
      default: 
       break; 
     } 
    } 
    else { 
     if(noOfDays[i] < days && days < noOfDays[i+1]){ 

      switch(val) { 
       case 1: 
        discount = (days-noOfDays[i]) * someValArrDiff[i+1]/baseDays + someValArr_1[i]; 
        break; 
       case 2: 
        discount = (days-noOfDays[i]) * someValArrDiff_2[i+1]/baseDays + someValArr_2[i]; 
        break; 
       case 3: 
        discount = (days-noOfDays[i]) * someValArrDiff_3[i+1]/baseDays + someValArr_3[i]; 
        break; 
       default: 
        break; 
      } 
     } 
    } 
    console.log("Discount " +discount); 
    return discount; 
} 

我試圖if(days < noOfDays[0])但這完全跳過的if-else條件,返回0

+1

爲什麼不只是'if(i == 0)'? – captncraig

+0

是否做到了這一點,但它返回0.如果第一個爲假,它不會進入else條件。 – input

+0

天申報在哪裏? – Jules

回答

1

在此代碼中i將被設置爲大於days的數組中第一個元素的索引。

var days = 535; 
 
var noOfDays =[182.5,365,547.5,730,912.5]; 
 

 
var i = 0; 
 
while (days > noOfDays[i]) i++; 
 

 
if (i == 0) { 
 
    // do your calculation for days <= 182.5 
 
} else { 
 
    // do your calculation for days between noOfDays[i-1] and noOfDays[i] 
 
}

這將刪除您有錯誤(一次迭代循環後返回),並刪除需要不必要的計算折扣,一切都交給我,這被丟棄。

+0

謝謝你。非常感激。 – input

1

不錯,看起來你解決了這個問題,但在邏輯上這是你需要的東西修理。

for (var i = 0; i < arrayLength; i++) { 

應該

for (var i = 0; i < arrayLength - 1; i++) { 

,因爲下面的語句將比較535未定義

if(noOfDays[i] < days && days < noOfDays[i+1]){ 

第二件事是,你可以安全地改變

if(noOfDays[i] == noOfDays[0]) 

if(i === 0) 
相關問題