Автоматическое окрашивание названия события Календаря Google на основе предпоследнего символа

#google-apps-script #calendar #google-calendar-api

#google-apps-script #Календарь #google-calendar-api

Вопрос:

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

 function ColorEvents() {

  var calendar = CalendarApp.getCalendarById("ID@group.calendar.google.com")
  var beginDate = new Date(2019, 0, 1); 
  var endDate = new Date(2080, 10, 1);
  Logger.log("found number of calendars: "   calendar.length);

    var events = calendar.getEvents(beginDate, endDate);
    for (var j=0; j<events.length; j  ) {
      var e = events[j];
      var title = e.getTitle();
      if (title.toLowerCase().endsWith("📱a")) {
        e.setColor(CalendarApp.EventColor.RED);
      }
  

Ответ №1:

Я считаю, что ваша цель заключается в следующем.

  • Вы хотите проверить предпоследний символ строкового значения с помощью скрипта Google Apps.

Чтобы проверить предпоследний символ, когда вы хотите использовать endsWith , как насчет следующего изменения?

От:

 if (title.toLowerCase().endsWith("📱a")) {
  

Для:

 if (title.toLowerCase().endsWith("📱", title.length - 1)) {
  
  • В этом примере сценария 📱 используется в качестве символа поиска из вашего сценария.

Тестирование:

 const search = "📱";
const str = ["ab📱de", "abc📱e", "abcd📱"];
const res = str.map(s => s.endsWith(search, s.length - 1));
console.log(res)  // <--- [ false, true, false ]  

Ссылка:

Добавлено:

В качестве другого метода строковое значение, включающее строку unicode, разбивается на синтаксис spread и сравнивает его.

Модифицированный сценарий:

От:

 if (title.toLowerCase().endsWith("📱a")) {
  

Для:

 var search = "📱";
var ar = [...title.toLowerCase()];  // In your case, I'm not sure whether "toLowerCase()" is required.
if (ar[ar.length - 2] == search) {
  
  • В этом примере сценария 📱 используется в качестве символа поиска из вашего сценария.

Тестирование:

 const search = "📱";
const str = ["ab📱de", "abc📱e", "abcd📱"];
const res = str.map(s => {
  const ar = [...s];
  return ar[ar.length - 2] == search;
});
console.log(res)  // <--- [ false, true, false ]  

Комментарии:

1. Спасибо за ваш ответ. У меня есть несколько условий, как показано ниже: if (title.toLowerCase().endsWith("💻", title.length - 1)) { e.setColor(CalendarApp.EventColor.RED); } if (title.toLowerCase().endsWith("🏠", title.length - 1)) { e.setColor(CalendarApp.EventColor.YELLOW); } В соответствии с измененным сценарием, нужно ли мне создавать переменную поиска для каждого условия? Это не сработало для меня: if (title.toLowerCase().endsWith("📱", title.length - 1)) { могу ли я делать что-то не так? Спасибо!!!

2. @Rahi Спасибо за ответ. Я должен извиниться за мой плохой английский. Перед вашим новым вопросом, могу я спросить вас о деталях This didn't work for me: ? Потому что для ответа на Could I be doing something wrong? него необходимо знать детали вашей текущей проблемы. Сначала я хотел бы решить вашу текущую проблему. И я добавил еще один пример сценария. Могу я спросить вас о результате этого? Я рад, когда вы можете сотрудничать для решения вашей проблемы. Можете ли вы сотрудничать, чтобы решить вашу проблему?

3. Мне очень жаль, я имел в виду, что эта модификация не сработала: if (title.toLowerCase().endsWith("📱", title.length - 1)) {

4. @Rahi Спасибо за ответ. Я должен снова извиниться за свое плохое знание английского. К сожалению, я не могу понять this modification didn't work: if (title.toLowerCase().endsWith("📱", title.length - 1)) { . Чтобы правильно понять вашу текущую проблему, можете ли вы предоставить примерное значение title для воспроизведения вашей проблемы? Кстати, в вашем вопросе я понял, что вы хотите выполнить поиск 📱 по 2-му последнему символу title . . Правильно ли я понимаю? И я добавил еще один пример сценария. Могу я спросить вас о результате этого?

5. например, заголовок события — Тестовое событие 📱1 function ColorEvents() { var calendar = CalendarApp.getCalendarById("ID@group.calendar.google.com") var beginDate = new Date(2019, 0, 1); var endDate = new Date(2080, 10, 1); var events = calendar.getEvents(beginDate, endDate); for (var j=0; j<events.length; j ) { var e = events[j]; var title = e.getTitle(); if (title.toLowerCase().endsWith("📱", title.length-1)) { e.setColor(CalendarApp.EventColor.MAUVE); } }

Ответ №2:

рабочий код выглядит так, большое спасибо @Tanaike

 function ColorEvents() {

  var calendar = CalendarApp.getCalendarById("ID@group.calendar.google.com")
  var beginDate = new Date(2019, 0, 1); 
  var endDate = new Date(2080, 10, 1);
  Logger.log("found number of calendars: "   calendar.length);

    var events = calendar.getEvents(beginDate, endDate);
    for (var j=0; j<events.length; j  ) {
      var e = events[j];
      var title = e.getTitle();

      if (title.toLowerCase().endsWith("💻", [title.length-2])) {
        e.setColor(CalendarApp.EventColor.RED);
      }
      if (title.toLowerCase().endsWith("🏠", [title.length-2])) {
        e.setColor(CalendarApp.EventColor.YELLOW);
      }
      if (title.toLowerCase().endsWith("🌎", [title.length-2])) {
        e.setColor(CalendarApp.EventColor.GREEN);
      }
        if (title.toLowerCase().endsWith("📱", [title.length-2])) {
        e.setColor(CalendarApp.EventColor.MAUVE);
      }
      if (title.toLowerCase().endsWith("🗄️", [title.length-2])) {
        e.setColor(CalendarApp.EventColor.BLUE);
      }
    }
  }