javascript - javascript从中心位置旋转 array

  显示原文与译文双语对照的内容
109 5

我正在尝试从中央位置旋转一个 array 。例如:

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

我尝试了 below 代码,但它在一定程度上工作,但它在开始处替代中心而不是中心。

对这种方法的任何帮助都会非常

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))
时间:原作者:

64 3

try

let rot= (a,v,i=a.indexOf(v)) => a.map((x,j,b)=> a[(i+1+j+a.length/2)%a.length|0])

n|0 强制转换为整数。我们使用箭头函数indexOf和映射

let arr=[1,2,3,4,5];
let rot=(a,v,i=a.indexOf(v))=>a.map((x,j,b)=>a[(i+1+j+a.length/2)%a.length|0]);
console.log( rot(arr,4) ); 
console.log( rot(arr,5) );
原作者:
134 1

首先,找到旋转 array ( delta )的多少,如果它是负的,如果它是负的,那么将它的大小与它的大小相同。将拼接好的项目放在另一端。

function rot(arr, center) {
 const index = arr.indexOf(center)
 if (index === -1) {
 throw new Error('')
 }
 if (arr.length % 2 === 0) {
 throw new Error('')
 }
 const cIndex = Math.floor(arr.length/2)
 const delta = cIndex - index
 let narr = [...arr]
 if (delta> 0) {
 let temp = narr.splice(-delta)
 narr = [...temp,.. .narr]
 }
 else if (delta <0) {
 let temp = narr.splice(0, -delta)
 narr = [...narr,.. .temp]
 }
 return narr
}
let arr = [1,2,3,4,5]
console.log(rot(arr, 1))
console.log(rot(arr, 2))
console.log(rot(arr, 3))
console.log(rot(arr, 4))
console.log(rot(arr, 5))
原作者:
150 1

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

我还将添加一些处理你无法找到的值的东西。

let arrr = [1,2,3,4,5];
function rot(arr, ind) {
 let narr = [...arr];//copy and de-reference our array
 let indexFound = narr.indexOf(ind);//find out where ind is
 if(indexFound <0 ) return narr;//ind was not found in your array
 let len = Math.floor((narr.length/2) - indexFound);//find out how far your target is from the center
 let doShift = (len <0);//if len is negative, then we need elements from the beginning moved, otherwise move the elements off the end with pop()
 len = Math.abs(len);//make sure len is always positive so our loop can run
 for(var i=0; i<len; i++) {
 if(doShift) narr.push(narr.shift());
 else narr.unshift(narr.pop());
 }
 return narr;
}
console.log(rot(arrr,3));
console.log(rot(arrr,1));
console.log(rot(arrr,5));

编辑:修改以处理从结束或者开始处的偏移

原作者:
131 4

使用这里选项从中心位置旋转 array

var arr = [1,2,3,4,5];
function rot(arr, ind)
{
 var narr = arr;
 var len = arr.length -ind;
 for(var i=0; i<len; i++)
 {
 narr.push(arr.shift());
 }
 return narr;
}
console.log(rot(arr,4));
console.log(rot(arr,3));
原作者:
...