Мои переменные сбрасываются после их изменения в для l oop в разделе сценария электронной таблицы - PullRequest
1 голос
/ 30 апреля 2020

Я новичок в javascript, но имею некоторый опыт работы с C#. Поэтому я хотел написать сценарий, который помог бы мне подсчитать, сколько продуктов одного типа было продано и сколько из них было продано определенной компанией. Цель состояла в том, чтобы добавить единицу к переменной numberSoldByCompany для каждой строки, имеющей то же значение, что и параметр market companyObjective. То же самое касается переменной numberOfProductStock и параметра marketObjective. Проблема в том, что после того, как я выйду из каждого для l oop, эти переменные сбрасываются в 0. Любые идеи?

function MarketShare(marketObjective, companyObjective) {

  var numberSoldByCompany = 0;
  var numberOfProductStock = 0;

  var range = SpreadsheetApp.getActiveSheet().getRange('A110:B244');

  var rangeRows = 134;
  var rangeColumn = 2;

  for (var i = 1; i <= rangeRows; i++){
    var currentValue = range.getCell(i,1).getValue();
    if(currentValue == marketObjective){

      numberOfProductStock++;

    }
  }

  for (var i = 1; i <= rangeRows; i++){
    var currentValue = range.getCell(i,2).getValue();
    if(currentValue == companyObjective){

      numberSoldByCompany++;

    }
  }

  if (numberSoldByCompany === 0){
    return 0;
  }
  else{
    return numberSoldByCompany/numberOfProductStock*100; //returns 0/0*100
  }

}

1 Ответ

3 голосов
/ 30 апреля 2020

Убедитесь, что не путаете оператор присваивания = с оператором равенства == или оператором строгого равенства ===. Последний не только сравнивает значения, но и типы. Например, если 0 == '0' равно true, 0 === '0' будет равно false.

...    
for (var i = 1; i <= rangeRows; i++){
    var currentValue = range.getCell(i,1).getValue();
    if(currentValue == marketObjective){ 
    // if you wanted to use strict equality here,
    // you need to fist make sure that supplied 
    // values from the spreadsheet are the same type as marketObjective

      numberOfProductStock++;

    }
  }

  for (var i = 1; i <= rangeRows; i++){
    var currentValue = range.getCell(j,2).getValue();
    if(currentValue == companyObjective){

      numberSoldByCompany++;

    }
  }

  if (numberSoldByCompany === 0){
    return 0;
  }
  else{
    return numberSoldByCompany/numberOfProductStock*100;
  }
...
...