Как установить разные значения для каждого цикла в операторе IF

Я пытаюсь установить значение для каждой ячейки отдельно во время выполнения цикла.

for (var i = 5; i <= lastRow; i++) { // Start from row 5

  var pos = sheet.getRange([i], 1); // 1 == column A, A=1,B=2,C=3 etc. 
  var posValue = (pos.isPartOfMerge() ? pos.getMergedRanges()[0].getCell(1, 1) : pos).getValue(); // get value of marged cell
  var animalColor = sheet.getRange([i], 9); // 9 == column I

  if (posValue == 'Cat') {
    animalColor.setValue('brown');
  } else if (posValue == 'Dog') {
    animalColor.setValue('black');
  } else if {
    animalColor.setValue('none');
  }
}

Я хочу пойти от этого:

Как установить разные значения для каждого цикла в операторе IF

К этому:

Как установить разные значения для каждого цикла в операторе IF

Я пытался написать дополнительные операторы IF, но это было глупо, а код стал тяжелее.

} else if { неправильный синтаксис. Либо добавьте условие для if, либо просто добавьте } else {, если оно не должно иметь условия.
VLAZ 14.02.2023 21:59

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

Barmar 14.02.2023 22:05

@VLAZ см. изображение i.stack.imgur.com/CmMiT.png с желаемым результатом. Я не могу получить такой результат, просто } else {

Valters 14.02.2023 22:07

@Barmar Я бы хотел, чтобы скрипт считывал значение в объединенной ячейке (пример «Собака»), а затем сценарий рядом с объединенными ячейками устанавливал желаемые значения. Из-за цикла он устанавливает только одно значение для всех ячеек.

Valters 14.02.2023 22:10

Последнее условие, вероятно, должно быть else if (posValue == 'Bird')

Barmar 14.02.2023 22:14

Но откуда берутся желаемые значения? Почему собака white-black-red-grey, а кошка brown-black-white-gray?

Barmar 14.02.2023 22:15

@Barmar Я хотел бы вручную установить значения в коде, как я сделал с одним цветом animalColor.setValue('brown');

Valters 14.02.2023 22:18
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
7
84
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Создайте массив цветов для каждого животного. Затем вы можете получить следующее значение из соответствующего массива животных.

const colors = {
  Dog: {
    colors: ['white', 'black', 'red', 'grey'],
    index: 0
  },
  Cat: {
    colors: ['brown', 'black', 'white', 'gray'],
    index: 0
  },
  Bird: {
    colors: ['yellow', 'red', 'blue', 'purple'],
    index: 0
  }
};

for (var i = 5; i <= lastRow; i++) { // Start from row 5

  var pos = sheet.getRange([i], 1); // 1 == column A, A=1,B=2,C=3 etc. 
  var posValue = (pos.isPartOfMerge() ? pos.getMergedRanges()[0].getCell(1, 1) : pos).getValue(); // get value of marged cell
  var animalColor = sheet.getRange([i], 9); // 9 == column I
  if (posValue in colors) {
    animalColor.setValue(colors[posValue].colors[colors[posValue].index++]);
  }
}

Только отсутствует , после второго массива и опечатка в color[colors[posValue].index++]); должна быть colors[colors[posValue].index++]);

Valters 15.02.2023 09:19

Альтернативное решение

Вы можете использовать методы includes, map и setValues для получения желаемого результата. Вы можете использовать сценарий ниже в качестве руководства.

Скрипт:

const colors = {
    "Cat": ["brown", "black", "white", "gray"],
    "Dog": ["white", "black", "red", "gray"],
    "Bird": ["yellow", "red", "blue", "purple"]
  };

function transformTable() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // Get the active sheet
  var range = sheet.getRange("A1:A"); // Get the range of the data
  var values = range.getValues().flat().filter(x => x); // Get the values of the data
  var animalsInData = Object.keys(colors);
  var output = [];

  values.map(x => (animalsInData.includes(x))? colors[x].map(y=>output.push([y])) : output.push([""]));
  sheet.getRange(1,3,output.length,1).setValues(output); // edit the range accordingly 
}

Выход:

Обратите внимание, что я добавил snake в качестве теста, чтобы увидеть, будет ли скрипт работать, даже если за пределами объекта colors есть дополнительное животное.

Использованная литература:

метод setValues ​​

Карта массива JavaScript

Строка JavaScript включает

Другие вопросы по теме