Javascript 我该如何防止这最后一次;“破损状态”;从被推到阵列
我正在动态切片一个数组,我可以通过使用Javascript 我该如何防止这最后一次;“破损状态”;从被推到阵列,javascript,arrays,while-loop,slice,Javascript,Arrays,While Loop,Slice,我正在动态切片一个数组,我可以通过使用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.') } e
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
}
}
理想情况下,我们的输出如下所示:
[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的实现非常干净,特别是考虑到他只为我修改了几行,效果非常好。再次感谢 您需要检查剩余项是否足以获得所需长度的数组。这意味着,您需要一个循环,继续检查实际的索引、所需的大小和长度 在拼接后检查最后一个数组的方法是不必要的,因为它会产生可避免的开销
函数片(数组,n){
var结果=[],
开始=0;
while(start+n您正在检查while
中的错误条件。最好计算您将在while
中添加多少子数组(除了您开始使用的子数组),然后计算到该数字,如下所示:
[3, 1, 0], [1, 0, 0], [0, 0, 1]]
var数字=[3,1,0,0,1];
函数片(num){
设arr=[this.digits.slice(0,num)]
设i=0
if(this.digits.length
Description
我相信您正在寻找与此类似的东西?如您所见,我还删除了一些冗余代码,即在此场景中使用while
循环和else
子句
我刚刚声明了数字
作为本演示的参数,我相信您可以主动将其更改为您的应用程序需求,而无需太多/任何帮助
函数片(数字,num){
常数arr=[];
如果(位数.length console.log(切片(d,3));
你真的很接近了。我认为我在这里提出的解决方案保留了你的基本想法。你遇到的问题是检查arr[I].length
等于num
表示这只是检查您添加到数组中的最后一项,而不是下一项。请检查您要添加的项
this.digits=[3,1,0,0,1];
函数片(num){
设arr=[]
设i=0
if(this.digits.length