【发布时间】:2019-06-22 18:53:07
【问题描述】:
我正在动态切片一个数组,我可以通过简单地使用arr.pop() 删除最后一个元素来获得我想要的功能,但我想知道为什么我的while 循环会在它破坏我的数组时将它添加到我的数组中有条件的。
slices(num){
let arr = [this.digits.slice(0, num)]
let i = 0
if (this.digits.length < num){
throw new Error('Slice size is too big.')
} else {
while (arr[i].length === num){
i++
arr.push(this.digits.slice(i, num + i))
}
// arr.pop() - removed for testing
return arr
}
}
这是一个例子。假设我们要对这个数组进行切片:
this.digits = [ 3, 1, 0, 0, 1 ]
理想情况下,我们的输出将如下所示:
[3, 1, 0], [1, 0, 0], [0, 0, 1]]
使用我当前的代码并且不使用arr.pop(),我的算法将始终潜入一个长度小于我的条件要求的长度的额外切片迭代(在本例中为num == 3)
这将是我的输出:
[[3, 1, 0], [1, 0, 0], [0, 0, 1], [0, 1]]
我知道有很多方法可以做到这一点,但为此,我想保持我的代码的完整性,所以使用我的实现的解决方案会很棒:D
编辑:我明白为什么要添加最后一个元素。由于之前的元素满足条件(它的长度等于 num),它会继续进行下一次迭代,但是我如何在不使用 .pop() 的情况下雄辩地处理它
编辑:谢谢大家的回答!它们看起来都可以工作,但是 Peter B 的实现非常干净,特别是考虑到他只为我更改了几行代码,它就像一个魅力。再次感谢!
【问题讨论】:
标签: javascript arrays while-loop slice