Добавьте больше значений в var, в то время как «значение X» ниже, чем Y - PullRequest
0 голосов
/ 28 января 2019

Мне нужно создать массив JSON, используя 3 или 4 столбца, но я не могу заполнить данные, используя условие "while".

У меня есть некоторые данные Google Sheet, которые могут иметь 3 или 4 столбца,эти данные должны находиться внутри массива JSON, например:

|---------------------|------------------|---------------------|------------------|
|      variable       |     condition    |        value        |      and/or      |
|---------------------|------------------|---------------------|------------------|
|         CPC         |        >         |         100         |                  |
|---------------------|------------------|---------------------|------------------|

В этом первом примере четвертый столбец пуст, поскольку у нас есть только одна строка данных, поэтому результат должен быть: ["CPC", ">", 100]

если у нас есть две (или более) строки данных, это должно выглядеть так:

|---------------------|------------------|---------------------|------------------|
|      variable       |     condition    |        value        |      and/or      |
|---------------------|------------------|---------------------|------------------|
|         CPC         |        >         |         100         |       and        |
|---------------------|------------------|---------------------|------------------|
|     s_volume        |        <         |         950         |       and        |
|---------------------|------------------|---------------------|------------------|
|      s_volume       |        >         |         100         |                  |
|---------------------|------------------|---------------------|------------------|

, как вы можете видеть, последняя строка впоследний столбец пуст, и результат должен выглядеть следующим образом:

["CPC", ">", 100], "and", ["s_volume", "<", 950], "and", ["s_volume", ">", 100]

Наконец, этот массив JSON должен быть назначен переменной.

Я пытался с этим:

//Get values from cells 
 var fil1 = ss.getSheetByName("app").getRange(row,4,1,1).getValue();
 var fil2 = ss.getSheetByName("app").getRange(row,5,1,1).getValue();
 var fil3 = ss.getSheetByName("app").getRange(row,6,1,1).getValue();
 var fil4 = ss.getSheetByName("app").getRange(row,7,1,1).getValue();

  //Count how many rows with data exist
  var coldat = ss.getSheetByName("app").getRange("D1:D").getValues();
  var coldats = coldat.filter(String).length;

  var jsonarr =  [fil1, fil2, fil3]
  //loop para añadir nuevos filtros
   while (row < coldats) {
   fil4,[fil1,fil2,fil3];
    row++;
  };

Очевидно, с моим кодом переменная "jsonarr" заполняется только первой строкой, игнорируя любое количество строк ниже.

Я пробовал с несколькими учебниками и методами массива сделать этот объект JSON, но я просто могу«тполучить правильный ответ.Мне очень жаль за этот вопрос новичка, я не специалист по кодированию, просто выродок, который делает некоторую работу и изучает самые основы.

1 Ответ

0 голосов
/ 26 марта 2019

Этот ответ предлагается для того, чтобы помочь ОП собрать воедино ряд проблем, указанных в исходном коде ОП.Я оставил несколько операторов Logger в коде ответа, которые OP может использовать для определения значений на разных этапах кода, помощи в устранении неполадок и в качестве помощи для развития навыков.

Результаты кода содержатся в переменной fildata.Исходя из примеров данных, значение:
["CPC",">",100],"and",["s_volume","<",950],"and",["s_volume",">",100]
Как это экспортируется, зависит от OP.

OP пытается создать массив данных (не соответствует JSON)для данных в электронной таблице в качестве входных данных для другой системы.

Конструкция кода OP означала, что он извлекал только одну строку данных и никогда не мог построить массив, как ожидалось.Код ОП является основой ответа, но есть несколько ключевых изменений:

  1. Перемещено coldat и coldats в верхнюю часть кода, чтобы можно было использовать coldats вопределение диапазона данных.
  2. Извлек один диапазон данных (getRange(2, 4, coldats, 4)) и использовал getValues ​​() только один раз.
  3. Создал переменную для хранения результатов кода
  4. Последовательный просмотр данных строка за строкой
  5. Для каждой строки оценивается, содержит ли столбец G (столбец «и / или») значение.В зависимости от результата, в результаты для этой строки включается столбец G.
  6. Построение результатов с построчным приращением.

function so54394711() {

  // setup spreadsheet
  var ss = SpreadsheetApp.getActive();
  var sheet = ss.getSheetByName("app");

  //Count how many rows with data exist
  var coldat = sheet.getRange("D2:D").getValues();
  var coldats = coldat.filter(String).length;
  //Logger.log("DEBUG: Number of rows of data = "+coldats); //DEBUG

  // establish the data range and values
  var range = sheet.getRange(2, 4, coldats, 4);
  //Logger.log("DEBUG: range = "+range.getA1Notation());//DEBUG
  var values = range.getValues();
  //Logger.log("DEBUG: values: "+ values);//DEBUG

  // create a variable to hold the results
  var fildata = "";

  //loop through the data by row, build the results line-by-line
  for (i = 0; i < coldats; i++) {
    var filD = values[i][0];
    var filE = values[i][1];
    var filF = values[i][2];
    var filG = values[i][3];

    // test if column G contains a value
    if (filG.length == 0) {
      // array is empty
      fildata += '[' + '"' + filD + '","' + filE + '",' + filF + ']';
      //Logger.log("DEBUG: G=MT, fildata = "+fildata);//DEBUG
    } else {
      //array not empty
      fildata += '[' + '"' + filD + '","' + filE + '",' + filF + ']' + ',"' + filG + '",';
      //Logger.log("DEBUG: G<>MT, fildata = "+fildata);//DEBUG
    }
    // Logger.log("DEBUG: fildata = "+fildata);//DEBUG   
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...