Сумма массивов, если условие выполнено в цикле - PullRequest
0 голосов
/ 14 апреля 2020

Я использую код ниже, чтобы создать таблицу. Работает нормально.

Моя конечная цель - добавить промежуточный итог для "расстановки приоритетов". Поскольку я уже зацикливаю таблицу, я хотел использовать существующий l oop. (без зацикливания каждого значения в массиве, которое, я боюсь, замедлит код)

Например, если моя таблица:

[A,de-prioritized,2,1,0,0,1],
[B,de-prioritized,0,2,1,1,0],
[C,other,0,5,2,1,1]

Я хочу получить: [2,3, 1,1,1] (как сумма [2,1,0,0,1] + [0,2,1,1,0]).

Другими словами: допустим, у меня есть Таблица А1: F10. В A есть флаг (либо «отменен приоритет», либо нет), а в B1: F10 есть значения. Я хочу повторить формулу в каждом столбце: SUMIF (A1: A10, «расстановка приоритетов», B1: B10), SUMIF (A1: A10, «расстановка приоритетов», C1: C10), SUMIF (A1: A10, «де-приоритет», D1: D10) и так далее. Я не могу установить формулы, потому что диапазон в приведенном выше примере - Dynami c. Я попытался установить формулу R1C1 с sumif в сценарии, но она не сработала.

Я обнаружил похожую проблему, но у меня может быть n массивов для суммирования, и я не могу уместить решение в моем: Javascript - Суммирование двух массивов за одну итерацию

Существующий код, который у меня есть:

  var l = sheet2.getRange('A1').getValue();
  for (var i = 0; i<l ;i++) {
    if (sheet3.getRange(i+3,2).getValue() == 'de-prioritized') { 
      sheet3.getRange(i+3,1,1,sheet3.getLastColumn()).setBackgroundRGB(250, 240, 230);
    } else sheet3.getRange(i+3,1,1,sheet3.getLastColumn()).setBackgroundRGB(225, 247, 232)
  }

1 Ответ

2 голосов
/ 14 апреля 2020
  • Вы хотите получить [2,3,1,1,1] из [["A","de-prioritized",2,1,0,0,1],["B","de-prioritized",0,2,1,1,0],["C","other",0,5,2,1,1]] с помощью Google Apps Script.

Если мое понимание верно, как насчет этого примера сценария? Пожалуйста, подумайте об этом как об одном из нескольких возможных ответов.

Пример сценария:

const arr = [["A","de-prioritized",2,1,0,0,1],["B","de-prioritized",0,2,1,1,0],["C","other",0,5,2,1,1]];
const res = arr.reduce((ar, [,b,...cdefg]) => {
  if (b == "de-prioritized") ar = ar.length > 0 ? ar.map((e, i) => e + cdefg[i]) : cdefg;
  return ar;
}, []);
console.log(res) // <--- [2,3,1,1,1]

Проверка сценария:

const arr = [["A","de-prioritized",2,1,0,0,1],["B","de-prioritized",0,2,1,1,0],["C","other",0,5,2,1,1]];
const res = arr.reduce((ar, [,b,...cdefg]) => {
  if (b == "de-prioritized") ar = ar.length > 0 ? ar.map((e, i) => e + cdefg[i]) : cdefg;
  return ar;
}, []);
console.log(res)

Список литературы:

Если я неправильно понял ваш вопрос, и это не то направление, которое вам нужно, я приношу свои извинения.

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