Javascript 从中心位置旋转阵列

Javascript 从中心位置旋转阵列,javascript,jquery,arrays,Javascript,Jquery,Arrays,我正在尝试从中心位置旋转阵列。比如说: 对于数组[1,2,3,4,5]如果我选择5作为当前元素,则新数组应该是[3,4,5,1,2]。如果我选择4,它应该是[2,3,4,5,1] 我尝试了下面的代码,它在一定程度上起作用,但它将选定的位置放在开头而不是中间 我们将非常感谢您对该方法的任何帮助 var arr = [0,1,2,3,4]; function rot(arr, ind) { var narr = []; var len = arr.length;

我正在尝试从中心位置旋转阵列。比如说:

对于数组
[1,2,3,4,5]
如果我选择
5
作为当前元素,则新数组应该是
[3,4,5,1,2]
。如果我选择
4
,它应该是
[2,3,4,5,1]

我尝试了下面的代码,它在一定程度上起作用,但它将选定的位置放在开头而不是中间

我们将非常感谢您对该方法的任何帮助

var arr = [0,1,2,3,4];
function rot(arr, ind)
{
    var narr = [];
        var len = arr.length;
        for(var i=0; i<arr.length; i++)
        {
            narr.push((i+ind<len?arr[i+ind]:arr[len-i-1]));
        }
    return narr;
}
console.log(rot(arr,0))
var-arr=[0,1,2,3,4];
功能衰退(arr,ind)
{
var-narr=[];
var len=阵列长度;

对于(var i=0;i首先,找出要旋转数组的程度(
delta
),然后从正面拼接与其大小相同的项目(如果是负数),如果是正数,则从背面拼接。 将拼接的项目放在另一端

功能旋转(arr,中心){
常数索引=arr.indexOf(中间)
如果(索引==-1){
抛出新错误(“”)
}
如果(arr.length%2==0){
抛出新错误(“”)
}
常数cIndex=数学楼层(arr.length/2)
常数增量=cIndex-索引
设narr=[…arr]
如果(增量>0){
let temp=narr.拼接(-delta)
narr=[…温度,…narr]
}
else if(delta<0){
让温度=平均拼接(0,-delta)
narr=[…narr,…temp]
}
返回narr
}
设arr=[1,2,3,4,5]
控制台日志(rot(arr,1))
控制台日志(rot(arr,2))
控制台日志(rot(arr,3))
控制台日志(rot(arr,4))

console.log(rot(arr,5))
这与@Mohammad发布的内容基本相同,但不是使用ind作为索引,而是使用arr.indexOf(ind)获取相关索引

我还想补充一些东西来处理你找不到价值的情况

让arrr=[1,2,3,4,5];
功能衰退(arr,ind){
让narr=[…arr];//复制并取消引用我们的数组
让indexFound=narr.indexOf(ind);//找出ind的位置
if(indexFound<0)return narr;//在数组中找不到ind
让len=Math.floor((narr.length/2)-indexFound);//找出目标距离中心有多远
设doShift=(len<0);//如果len为负数,则需要从开始移动元素,否则使用pop()将元素从结尾移动
len=Math.abs(len);//确保len始终为正,以便循环可以运行
对于(var i=0;iTry

其中
n | 0
将浮点转换为整数。我们使用,和

设arr=[1,2,3,4,5];
设rot=(a,v,i=a.indexOf(v))=>a.map((x,j)=>a[(i+1+j+a.length/2)%a.length | 0]);
控制台日志(rot(arr,4));

console.log(rot(arr,5));
为什么
2
在第二次输出中出现两次?如果数组中有偶数个项目该怎么办?第二个参数是索引或值?@VDWWD我的要求仅适用于奇数个项目items@NathanXabedi它的值不应该是
a.map(/*…*/)
而不是
arr.map(/*…*/)
let rot= (a,v,i=a.indexOf(v)) => a.map((x,j)=> a[(i+1+j+a.length/2)%a.length|0])