#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);
}
}
}