gpt4 book ai didi

javascript - 如何循环遍历一组值以优化对函数的调用次数?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:09:58 24 4
gpt4 key购买 nike

我有一个来自 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等...?

换句话说,我如何将 rowPositions 数组转换为二维数组,例如:

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

然后我可以使用它为每个提供的坐标调用一次 deleteRows 函数。

最佳答案

如果给定一组要删除的项目,例如 [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))

关于javascript - 如何循环遍历一组值以优化对函数的调用次数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51091765/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com