我有一个Google电子表格中的行数组,其中的数字介于1到800之间:
var rowPositions = [1,3,4,5,9,10,11,12...795,799,800]
并且,为了提高效率,我需要对函数deleteRows进行API调用,该函数接受两个参数:
deleteRows(positionOfFirstRow, howManyRowsShouldBeDeletedStartingFromFirstRow)
Google Documentation for deleteRows.
如何在Javascript中创建一个函数,以给定数组最小次数地调用deleteRows? IE,以上述数组为例,该函数调用deleteRows以删除位置1的行,然后再次调用以删除3、4、5,然后再次删除10、11、12等...? / p>
换句话说,如何将rowPositions数组转换为二维数组,例如:
var 2DrowPositions = [[1,1],[3,2],[5,1],[9,4]]
然后我可以使用它在每个提供的坐标处调用一次deleteRows函数。
答案 0 :(得分:1)
如果给您要删除的项目数组,如[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))