2014-06-30 27 views
0

我想創建一個簡單的Google電子表格函數來將一個等級轉換爲一個積分系統,然後添加積分。有權訪問電子表格的人(A,B,C,D)將根據第一選擇(1),第二選擇(2)和第三選擇(3)對他們的選擇(W,X,Y,Z)基礎。谷歌腳本:函數來計票

行是選民,選擇是在列中。

每投1票= 3分; 2票= 2分; 3票= 1分。

出於某種原因,我的腳本只輸出腳本的長度而不是點的總和。你能幫我確定腳本哪裏出錯了嗎?

function tally(rankarray) { 
    var rank = 0;  // this is the vote cast 
    var result = 0;  // this will hold the total 
    var value = 0;  // this holds the value of the vote cast 

    for (var i=0; i < rankarray.length; i++){ 
    rank = rankarray[i]; 
    if (rank = 1) { 
    value = 3; 
    } 
    if (rank = 2) { 
    value = 2; 
    } 
    if (rank = 3) { 
    value = 1; 
    } 
    result += value; 
    } 

    return result; 
} 

編輯:

我想我固定它。任何人都可以看到下面的任何問題?

function tally(rankarray) { 
    var rank = 0; 
    var result = 0;  // this will hold the total 
    var value = 0;  // this holds the value of the vote cast 

    for (var i=0; i < rankarray.length; i++){ 
    rank = rankarray[i]; 
    if (rank == 1) { 
     value = 3; 
    } 
    else if (rank == 2) { 
     value = 2; 
    } 
    else if (rank == 3) { 
     value = 1; 
    } 
    result += value; 
    value = 0; 
    } 
    return result; 
} 
+1

請注意'if(rank = 1)'不會做你認爲它的作用。單個等號表示將值「1」分配給變量「rank」。你需要一個雙等號:'if(rank == 1)',它告訴它測試'rank'的值是否等於'1'。 (無論如何,Nanashi的答案,使用'switch'構造而不是'if',這是一個很好的解決方案。) –

回答

1

嘗試下面的腳本:

function tally(rankarray) 
{ 
    var rank = 0;  // this is the vote cast 
    var result = 0;  // this will hold the total 
    var value = 0;  // this holds the value of the vote cast 

    for (var i=0; i < rankarray.length; i++) 
    { 
    rank = rankarray[i]; 
    switch(rank) 
    { 
     case 1: 
      value = 3; 
      break; 
     case 2: 
      value = 2; 
      break; 
     case 3: 
      value = 1; 
      break; 
    } 
    result += value; 
    } 
    return result; 
} 

JSFiddle.

希望這有助於。

+0

謝謝。無論投票如何,這都返回「0」。我想我已經知道我的問題了。我偶然的if語句elseif,並且如果(rank == 1)等也將它們更改爲布爾值。 – user3791612

+0

@ user3791612所以你打算髮布*答案* - 然後,大概是[接受](http:// stackoverflow .com/help/accepted-answer)呢? – pnuts