У меня есть список имен папок, соответствующих именам файлов в каждой из этих папок.
Я хочу удалить повторяющиеся имена папок. Это то, что мне нужно, чтобы в итоге получилось:
Я думал, что сделаю обратное l oop, сравнивая каждую запись с один перед этим. Если он совпадает, добавьте пробел ''
в начало массива. Если он не совпадает, добавьте значение записи массива в начало массива.
Ниже моя попытка. Почему-то все сравнения ложны. Что я делаю не так?
//Delete Duplicate folder names
var destRange = summarySht.getRange(startRow + 1,2,detLastRN - startRow,1);
//var folderNamesArr = destRange.getValues();
var folderNamesArr = [['Folder1'],['Folder1'],['Folder2'],['Folder2'],['Folder3'],['Folder4'],['Folder5'],['Folder6'],['Folder6']];
var updatedFolderNamesArr = [];
for (i = folderNamesArr.length - 1; i >= 0; i--) {
if(folderNamesArr[i] != folderNamesArr[i - 1]){
updatedFolderNamesArr.unshift(folderNamesArr[i])
}else{
updatedFolderNamesArr.unshift([''])
}
Logger.log(folderNamesArr[i] + ' vs ' + folderNamesArr[i - 1] + ' = ' + (folderNamesArr[i] === folderNamesArr[i - 1]))
}
Logger.log(updatedFolderNamesArr)
destRange.clearContent();
destRange.setValues(updatedFolderNamesArr);
У меня мало строк. Я думаю, что в худшем случае у нас будет 100, может быть, 200 строк для обработки.
Обновление: Я добавил .toString()
, и, похоже, он работает. Вот что я сделал и мои проблемы с этим.
//Delete Duplicate folder names
var destRange = summarySht.getRange(startRow + 1,2,detLastRN - startRow,1);
//var folderNamesArr = destRange.getValues();
var folderNamesArr = [['Folder1'],['Folder1'],['Folder2'],['Folder2'],['Folder3'],['Folder4'],['Folder5'],['Folder6'],['Folder6']];
var updatedFolderNamesArr = [];
for (i = folderNamesArr.length - 1; i >= 1; i--) {
if(folderNamesArr[i].toString() !== folderNamesArr[i - 1].toString()){
updatedFolderNamesArr.unshift(folderNamesArr[i])
}else{
updatedFolderNamesArr.unshift([''])
}
Logger.log(folderNamesArr[i] + ' vs ' + folderNamesArr[i - 1] + ' = ' + (folderNamesArr[i] === folderNamesArr[i - 1]))
}
//Add back the first folder
updatedFolderNamesArr.unshift(folderNamesArr[0]);
Logger.log(updatedFolderNamesArr)
destRange.clearContent();
destRange.setValues(updatedFolderNamesArr);
Первая проблема, с которой я столкнулся, заключалась в том, что folderNamesArr[i - 1]
не работает, когда доходит до последнего элемента. Поэтому мне пришлось изменить ограничение на l oop на i >= 1
. Это привело к тому, что на 1 элемент меньше. Первый элемент отсутствовал, поэтому мне пришлось добавить его обратно в конец.
Мне это кажется хакерским. Это приемлемо или есть способы / методы получше?