Как прокрутить массив значений, чтобы оптимизировать количество обращений к функции? - PullRequest
0 голосов
/ 29 июня 2018

У меня есть массив строк из электронной таблицы Google, чередующиеся с числами в пределах от 1 до 800:

var rowPositions = [1,3,4,5,9,10,11,12...795,799,800]

И, ради эффективности, мне нужно сделать вызов API для функции deleteRows, которая принимает два параметра:

deleteRows(positionOfFirstRow, howManyRowsShouldBeDeletedStartingFromFirstRow)

Документация Google для deleteRows.

Как я могу создать функцию в Javascript, которая вызывает deleteRows минимальное количество раз для данного массива? IE, используя вышеупомянутый массив в качестве примера, функция вызывает deleteRows для удаления строки в позиции 1, затем вызывает ее снова для удаления 3,4,5, затем снова для удаления 10,11,12 и т. Д ...?

Другими словами, как я могу преобразовать этот массив rowPositions в двумерный, например ::

var 2DrowPositions = [[1,1],[3,2],[5,1],[9,4]]

, который я затем могу использовать для вызова функции deleteRows один раз для заданной координаты.

1 Ответ

0 голосов
/ 29 июня 2018

Если вам дан массив элементов для удаления, например [1, 3, 4, 5, 7, 8, 9, 15, 18, 19, 20, 23], вы можете пройти по этому массиву и искать последовательные числа. Следите за тем, сколько последовательных номеров вы видите, и когда вы нажмете непоследовательный номер, сохраните старый и начните заново.

Вот один из способов сделать это, который довольно легко прочитать:

let del = [1, 3, 4, 5, 7, 8, 9, 15, 18, 19, 20, 23]

let res = []
let curr = {start: del[0], count: 0}
del.forEach((item, i, arr) => {
    if (i === 0 || arr[i] === 1 + arr[i-1]) curr.count++
    else {
        res.push(curr)
        curr = {start: arr[i], count:1}
    }
})
res.push(curr)
console.log(res)

Это вернет массив объектов вида {start, count}, который вы можете использовать в своей функции с чем-то вроде:

res.forEach(r => deleteRows(r.start, r.count))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...