Javascript 基于单个索引从数组中获取5个元素的堆栈

Javascript 基于单个索引从数组中获取5个元素的堆栈,javascript,Javascript,我试图找出如何基于单个索引从数组中提取5个数组元素。索引将是这5个数组元素中间的元素。例如,如果我有这个数组: let array = ['1', '2', '3', '4', '5', '6', '7'] 索引为2,我希望将此数组返回给我: ['1', '2', '3', '4', '5'] ['6', '7', '1', '2', '3'] ['4', '5', '6', '7', '1'] 如果索引为0,我希望将此数组返回给我: ['1', '2', '3', '4', '5']

我试图找出如何基于单个索引从数组中提取5个数组元素。索引将是这5个数组元素中间的元素。例如,如果我有这个数组:

let array = ['1', '2', '3', '4', '5', '6', '7']
索引为2,我希望将此数组返回给我:

['1', '2', '3', '4', '5']
['6', '7', '1', '2', '3']
['4', '5', '6', '7', '1']
如果索引为0,我希望将此数组返回给我:

['1', '2', '3', '4', '5']
['6', '7', '1', '2', '3']
['4', '5', '6', '7', '1']
如果索引为5,我希望将此数组返回给我:

['1', '2', '3', '4', '5']
['6', '7', '1', '2', '3']
['4', '5', '6', '7', '1']
我希望我能表达我想做的事情。我希望对应于索引的元素位于数组的中间,并同时附加2个前一个和2个下一个元素。
正如您所看到的,当索引位于数组的末尾,并且在索引之后没有更多的元素可追加时,我从一开始就开始追加元素。反之亦然,当索引位于数组的开头时,我会从数组的结尾预先添加元素。这是我无法理解的部分。

您可以添加索引处理。若索引小于0=将数组长度添加到索引,若索引大于数组长度-从中减去数组长度。它会解决你的问题

让数组=['1','2','3','4','5','6','7']
函数getArr(arr,idx){
让newArr=[]
for(设i=idx-2;i=arr.length){
currentindex=i-array.length
}
newArr.push(arr[currentindex])
}
返回纽瓦尔
}
console.log(getArr(数组,0))
console.log(getArr(数组,2))

log(getArr(array,5))
一个解决方案是用副本包装数组。然后可以将数组的长度添加到索引中,并创建数组。这可以很好地处理边缘情况

函数getArr(arr,idx){ 设ary=[…arr,…arr,…arr] 设ptr=idx+arr.length; 返回元切片(ptr-2,ptr+3); } 让数组=['1','2','3','4','5','6','7'] console.log(getArr(数组,0)) console.log(getArr(数组,2)) log(getArr(array,5))这是一种声明式(函数式编程)方法:

如果数组是
a
,给定的索引是
i
,我们可以想象所需的数组是:

[i-2, i-1, i, i+1, 1+2]
// Unfortunately Javascript doesn't support [start..end] syntax
但是,如果我们尝试将其用作数组(
a
)的索引,则某些索引可能超出列表,除非我们能够以循环方式访问列表项。例如,在[1,2,3]中,第5项是2(5 mod 3)。这样一个函数应该已经编写了一点:

下面是将输入数组转换为输出的步骤,该函数名为
f
,它接受输入数组(
a
)和索引(
i
):

或者在没有依赖关系的情况下将其写入:

常量数组=['1','2','3','4','5','6','7'] 常数f=(a,i)=>[i-2,i-1,i,i+1,i+2] .map(x=>a[(x%a.length+a.length)%a.length]) console.log(f(数组,2)) console.log(f(数组,0))
log(f(array,5))您的索引值和预期的返回对我来说没有多大意义。第一个例子不是索引0、第二个5和第三个3吗?