Скрипты Google: функция подсчета голосов

#javascript #google-sheets

#javascript #google-таблицы

Вопрос:

Я пытаюсь создать простую функцию электронной таблицы Google для преобразования ранга в систему баллов, а затем добавить баллы. Пользователь (A, B, C, D), имеющий доступ к электронной таблице, будет оценивать свои варианты (W, X, Y, Z) на основе первого выбора (1), второго выбора (2) и третьего выбора (3).

Строки — это избиратели, а варианты — в столбцах.

Каждый 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 resu<
}
  

Редактировать:

Я думаю, что я это исправил. Кто-нибудь видит какую-либо проблему с приведенным ниже?

 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 resu<
}
  

Комментарии:

1. Пожалуйста, обратите внимание, что if(rank = 1) это не то, что вы думаете. Одиночный знак равенства указывает ему присвоить значение 1 переменной rank . Вам нужен двойной знак равенства: if(rank == 1) , который сообщает ему, чтобы проверить, rank равно 1 ли значение. (Несмотря на это, ответ Нанаши, который использует 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 resu<
}
  

JSFiddle.

Надеюсь, это поможет.

Комментарии:

1. Спасибо. Это вернуло «0» независимо от голосов. Я думаю, что я разобрался со своей проблемой. Я заменил операторы if на elseif, а также изменил их на логические значения if (ранг == 1) и т.д.