Здравствуйте!
Пишу скрипт для гугл экселя. Есть два массива:
DataArray - двумерный массив, в который собрана информация со всех листов.
имеет такой вид: DataArray[idSheet][sheetValues]
т.е. например имеет данные DataArray["лист 1"]["А1:А100"]
и тогда DataArray[0][10][0] возвращает значение ячейки А11 первого листа
второй массив -
tData - данные из текущего листа (который в данный момент открыт). Имеет такой вид: tData[sheetValues]
Мне нужно сравнить эти два массива и записать название того листа, с которым нашлось совпадение.
Т.е. если на текущем листе есть такая информация:
А1 яблоки
А2 груши
А3 апельсины
а на других листах, например на листе 15 также в одной из ячеек есть "груши", то в массив
allNames добавляется значение "лист 15" под 2 идентификатором.
Я написал рабочий код. Все работает хорошо, но проблема в том, что если на текущем листе имеется больше 100 записей, а общая база в 2-3 раза больше, то этот скрипт выполняется 5-10 минут. Хотелось бы узнать как можно оптимизировать этот процесс.
в массиве
NameArray содержится список всех листов.
vName содержит название текущего листа
counter - счетчик для случая, когда надо сравнить каждое значение текущего листа с остальными значениями этого листа (чтобы не было повторов на текущем листе). Если счетчик больше 1, то на листе есть дубликат.
numRows - кол-во записей на текущем листе
код
var allNames = [""]; // Массив с кем есть дубликаты
for(var k=0;k<numRows;k++){
allNames[k]=false; // заполняем false, ибо пока дубликатов ни у кого нету
}
for(var i=0;i<NameArray.length;i++){
for(var j=0;j<DataArray[i].length;j++){
var counter = 0;
for(var k=0;k<tData.length;k++){
if(tData[k][0] == DataArray[i][j][0] && vName != i && tData[k][0]!=""){ //Если данные на другом листе уже есть,
allNames[k]=NameArray[i]; // то заносим его название в массив на позицию i
}else if(tData[k][0] == DataArray[i][j][0] && vName == i && tData[k][0]!=""){ //Если данные на текущем листе уже есть,
if(counter == 1){ // то также заносим его название в массив на позицию i
allNames[k]=NameArray[i];
}
counter++;
}
}
}
}