Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript中的前移数组_Javascript_Arrays_Shift_Alphabet - Fatal编程技术网

javascript中的前移数组

javascript中的前移数组,javascript,arrays,shift,alphabet,Javascript,Arrays,Shift,Alphabet,好吧,我不知道标题是否正确,但我正在努力找到一个算法来做类似的事情。所以我们有一个输入数组,比如:[a','b','c',,…],直到字母表的末尾,还有一个数字可以移动。如果我有一个数字3要移位,我必须像['x','y','z','a','b','c',…]那样输出数组; 有什么办法吗? 我试过: 函数求解(args) { 设arr=['a','b','c','d']; 设数=3; for(设i=0;ia[(i+(len+n%len))%len]); }; var alpha=Array(26)

好吧,我不知道标题是否正确,但我正在努力找到一个算法来做类似的事情。所以我们有一个输入数组,比如:[a','b','c',,…],直到字母表的末尾,还有一个数字可以移动。如果我有一个数字3要移位,我必须像['x','y','z','a','b','c',…]那样输出数组; 有什么办法吗? 我试过:

函数求解(args)
{
设arr=['a','b','c','d'];
设数=3;
for(设i=0;i
这几乎就是它了,只是它打印了
[d,e,f…a,b,c]

for(var i = 0; i < number; i++){
   arr.push(arr.shift());
}

unshift
函数在数组的前面添加一个元素,而
pop
函数删除最后一个项目,因此它将最后一个项目移动到循环中的前面
number
次。

您要查找的工具是
.slice
( ),及
.concat
()


下面是一个将结果复制到新数组的解决方案。时间和空间复杂度为O(arr.length),如果您正在寻找一种解决方案,该解决方案可以在适当的位置对数组进行变异,并且时间复杂度为O(x),请参见Patrick的答案

功能旋转(arr,x){
返回arr.slice(x).concat(arr.slice(0,x));
}
让arr=“abcdefghijkl”.split(“”);

console.log(旋转(arr,-3.join)(“”)只需将数组拆分为两部分,然后将其合并即可。就这样

arr = ['a', 'b', 'c', 'd', 'e', 'f', 'g'];
number = 3;

xxx = arr.slice(-number);
yyy = arr.slice(0,arr.length - number);
arr_shift = xxx.concat(yyy);

console.log(arr_shift);

Array.prototye.rotate()
的发明可能会为这项工作带来便利。让我们看一个简单的实现

Array.prototype.rotate=函数(n){
var len=此长度;
返回!(n%len)?this.slice()
:此.map((e,i,a)=>a[(i+(len+n%len))%len]);
};
var alpha=Array(26).fill().map((_,i)=>String.fromCharCode(i+97)),
rotateLeft=e=>(alpha=alpha.rotate(1),alphabet.textContent=alpha.join(“,”),
rotateRight=e=>(alpha=alpha.rotate(-1),alphabet.textContent=alpha.join(“,”);
alphabet.textContent=alpha.join(“,”);
按钮左。添加的列表器(“单击”,旋转左);
按钮右侧。添加EventListener(“单击”,旋转右侧)

可能的重复操作是旋转数组,而不是移动数组。它不应该是pop和unshift吗?do
arr.unshift(arr.pop())取而代之
for(var i = 0; i < number; i++){
   arr.unshift(arr.pop());
}
function getShiftedArray (arr, n) {
    var i = arr.length - n;
    var front = arr.slice(0, i);
    var back = arr.slice(i);
    return back.concat(front);
}
arr = ['a', 'b', 'c', 'd', 'e', 'f', 'g'];
number = 3;

xxx = arr.slice(-number);
yyy = arr.slice(0,arr.length - number);
arr_shift = xxx.concat(yyy);

console.log(arr_shift);