Это решение игнорирует упоминание в коде «дубликатов» и фокусируется на поставленном вами вопросе об удалении дат, которым меньше 10 дней. Однако, если вам также необходимо удалить дубликаты, их можно легко добавить.
Я предлагаю вам поместить свое условие в функцию, которая принимает строку данных в качестве входных данных и возвращает логическое значение (истина / ложь), например как
function dateCheckedOlderThan10Days(row) {
return getDays(row[4]) > 10;
}
function getDays(date) {
const sec = 1000;
const min = 60 * sec;
const hour = 60 * min;
const day = 24 * hour;
return Math.floor((new Date() - date)/day);
}
(Обратите внимание, как вы можете полностью извлечь функцию getDays
из своей основной функции. Это сокращает объем кода, который вы должны думать внутри каждого определения функции.)
Эта функция идеально впишется в Array.prototype.filter
, а название функции дает очень четкое представление о том, что вы ожидаете.
const dataOlderThan10Days = ss.getSheetByName('Data Processing')
.getDataRange()
.getValues()
.filter(dateCheckedOlderThan10Days);
Вот функция checked
, преобразованная в несколько функций:
Код. js
function check() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const dataSheet = ss.getSheetByName('Data Processing');
const data = dataSheet.getDataRange().getValues();
const dataOlderThan10Days = data
.slice(1) // removes header row; comment out if you don't have a header row
.filter(dateCheckedOlderThan10Days);
dataSheet.clearContents();
//dataOlderThan10Days.unshift(data[0]); // <-- if you want to restore the headers
setData(dataSheet, dataOlderThan10Days);
}
function dateCheckedOlderThan10Days(row) {
return getDays(row[HEADINGS.DATE_CHECKED]) > 10;
}
const HEADINGS = {
FIRST_NAME: 0,
LAST_NAME: 1,
SALARY: 2,
AGE: 3,
DATE_CHECKED: 4
};
function setData(sheet, data) {
sheet.getRange(1, 1, data.length, data[0].length).setValues(data);
}
function getDays(date) {
const sec = 1000;
const min = 60 * sec;
const hour = 60 * min;
const day = 24 * hour;
return Math.floor((new Date() - date)/day);
}