作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个来自 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/
我是一名优秀的程序员,十分优秀!