Javascript 从后面获取数组项

Javascript 从后面获取数组项,javascript,Javascript,我一直在尝试从数组的后面获取项目。函数应该打印循环中的值。在下图中,您可以看到图案中缺少两个项目 预期结果 //24,25,26,27,28,29,30 //17,18,19,20,21,22,23 //10,11,12,13,14,15,16 //3,4,5,6,7,8,9 //1,2,26,27,28,29,30 5和9数组长度,而不是7。第5个数字数组应该有值。 [1,2,26,27,28,29,30]或[26,27,28,29,30,2,1]。 相同的模式应应用于9号数组 我试过了,

我一直在尝试从数组的后面获取项目。函数应该打印循环中的值。在下图中,您可以看到图案中缺少两个项目

预期结果

//24,25,26,27,28,29,30
//17,18,19,20,21,22,23
//10,11,12,13,14,15,16
//3,4,5,6,7,8,9
//1,2,26,27,28,29,30
5和9数组长度,而不是7。第5个数字数组应该有值。
[1,2,26,27,28,29,30]
[26,27,28,29,30,2,1]
。 相同的模式应应用于9号数组

我试过了,但没有找到解决办法

//设置
var arr=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30];
var指数=30;
var值
函数getValues(长度){
arrIndex=arrIndex-长度;

如果(arrIndex@carlos),请尝试以下解决方案

问题是,这里使用(Array.slice)函数

您的数组为30[数组索引仅对0到29有效]。 即var arr=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30]

现在,当您使用var arrdex=30时,此时;根据循环,数组(5)的值从索引25开始,数组长度为7

所以在这里,您也可以尝试从25+7中获取值,即31(仅供参考,31是索引)

因此,您的值=arr.slice(25,31)。正如我们所知,在我们的var arr中没有30和31索引,那么它肯定也不在数组5的值中

因此,如果切片数组的endIndex不存在,那么我们需要再次从O索引启动以获取剩余元素。因此,您需要计算缺少多少索引?[此处其计数=2],因此我们需要防止该计数,并从(0,cnt)获取数组切片。最后,我们需要将原始数组与下一个数组关联(即,我们从0开始)

为了解决这个问题,我们编写了以下逻辑

  if (arrIndex < 0) {
    arrIndex = arr.length - Math.abs(arrIndex)
    var otherVal = 0;
    if (arrIndex + length >= arr.length) {
      otherVal = (arrIndex + length) - arr.length;
      values = arr.slice(arrIndex, arr.length)
    }
    if (otherVal > 0) {
      values = values.concat(arr.slice(0, otherVal))
    }
if(索引<0){
arrIndex=arr.length-Math.abs(arrIndex)
var-otherVal=0;
如果(arr索引+长度>=arr.length){
otherVal=(arrIndex+length)-arr.length;
值=arr.slice(arr索引,arr.length)
}
如果(其他值>0){
values=values.concat(arr.slice(0,otherVal))
}
因此,您的最终输出将类似如下所示

//设置
var arr=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30];
var指数=30;
var值
函数getValues(长度){
arrIndex=arrIndex-长度;
如果(指数<0){
arrIndex=arr.length-Math.abs(arrIndex)
var-otherVal=0;
如果(arr索引+长度>=arr.length){
otherVal=(arrIndex+length)-arr.length;
值=arr.slice(arr索引,arr.length)
}
如果(其他值>0){
values=values.concat(arr.slice(0,otherVal))
}
}否则{
值=arr.slice(arrIndex,arrIndex+长度)
}
var valuescont=values.length;
返回值;
}
//获取值
对于(变量i=0;i<10;i++){
console.log(getValues(7));

}
您有一个非常有趣的需求,但接受了挑战:)

const arr=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30];
函数getValues(长度){
常量值=[];
设temp=[];
对于(设i=arr.length-1;i>=0;i-=1){
反移位温度(arr[i]);
如果(温度长度===长度){
值。推送(温度);
温度=[];
}
}
如果(温度长度>0){
对于(设i=arr.length-length+temp.length;i}
您的问题是什么?要切片的负值?弹出(删除它们)?我没有真正得到任务。您是否尝试获取最后N个项目并用1、2、3填充结果…如果源短于N?这里您仅使用切片,假设在数组索引35时,it任务值从26到30。这是因为您正在使用切片函数,该函数提供从开始到范围的数组,而不是当它在数组中S值为25,给定长度为7,然后尝试从原始数组中获得25到32的数组。因为原始数组不考虑31和32的值,它只显示5个值。因此,在这种情况下,必须找到直到哪个长度才可以得到值。然后,如果限制结束,则需要再次从0开始,得到R。emaining value from start.:@user202729,我已经编辑了我的答案,如果您对任何部分仍不清楚,请告诉我。谢谢:)@user202729更新了一些解释,使其更有用。此外,我不确定您不作为讨论表单的观点是什么;老实说,这似乎不合适。