Google Apps Script - добавление в элементы массива - PullRequest
0 голосов
/ 22 января 2019

Я новичок, хорошо ... Я пытаюсь использовать математические операторы в элементах массива, но я не знаю, что я делаю неправильно.Я использовал функции parseInt и Number для приращения элементов массива с некоторыми целыми числами, но это не работает.

исходные значения из моего листа: [[1000.0], [1000.0], [3000.0], [1000.0], [], [], [], [], [], []]

Когда я попытался без parseInt / Number , результат был: [01000100030001000, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0]

Когда я попробовал с parseInt / Number : [NaN, 0,0, 0,0, 0,0, 0,0,0,0, 0,0, 0,0, 0,0, 0,0]

function myFunction() {
  var ssCDB = SpreadsheetApp.getActive().getSheetByName("CDB");
  var cdbRange = ssCDB.getRange(3, 3, 10, 1).getValues();

  var cdbSum = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0];

  Logger.log(cdbRange);

  for (var i=0; i<cdbRange.length; i++) {
     cdbSum[0] = cdbSum[0] + cdbRange[i];
    //cdbSum[0] = parseInt(cdbSum[0]) + parseInt(cdbRange[i]);
  }

  Logger.log(cdbSum);
}

Я ожидаю что-то вроде: [ 6000.0 , 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0.0]

что я делаю не так?Есть идеи?

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Я думаю, это то, что вы пытаетесь сделать:

function myFunction() {
  var sh=SpreadsheetApp.getActiveSheet();
  var vA=sh.getRange(3,3,10,1).getValues();
  var sumA=[0,0,0,0,0,0,0,0,0,0];
  for(var i=0;i<vA.length;i++) {
     sumA[i]+=vA[i][0];//a 1 column 2d array
  }
  SpreadsheetApp.getUi().showModelessDialog(HtmlService.createHtmlOutput(sumA.join(', ')), 'Sum');//Do not need this it just show your sum values
}
0 голосов
/ 22 января 2019

Как насчет этой модификации? Я думаю, что есть 3 проблемы для вашей ситуации.

  1. cdbRange - это двумерный массив. Но вы используете это как cdbRange[i].
    • В этом случае cdbRange[0] - это [1000.0], который является объектом.
  2. По cdbSum[0] = cdbSum[0] + cdbRange[i], cdbSum[0] используется как строковое значение. Потому что cdbRange[i] это объект. Когда он добавляет объект к числу, он становится строковым типом.
    • Это причина 01000100030001000. Начальное значение cdbSum[0] равно 0.
  3. Значение в элементе индекса от 4 до 9 из cdbRange равно undefined.
    • Когда они суммируются, результат становится NaN.

Чтобы избежать этих проблем, измените их следующим образом.

От:

cdbSum[0] = cdbSum[0] + cdbRange[i];

Кому:

if (cdbRange[i][0]) cdbSum[0] += cdbRange[i][0];

или

if (cdbRange[i][0]) cdbSum[0] += Number(cdbRange[i][0]);

Результат:

[6000.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]

Примечание:

  • Я понял, что вы хотите добавить сумму всех элементов cdbRange к cdbSum[0].

Ссылки

Если я неправильно понял ваш вопрос, пожалуйста, скажите мне. Я хотел бы изменить его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...