好吧,所以我不知道标题是否正确,但我正在努力做的是找到一个算法来做这样的事情。所以我们有一个输入数组,例如:[' a'' b',' c'' d',...]直到字母表的结尾,以及要转移的数字。我必须输出数组,如[' x',' y',' z',' a',' b&# 39;,' c',...]如果我有一个3号移位; 关于如何做的任何想法? 我试过了:
function solve(args)
{
let arr = ['a', 'b', 'c', 'd'];
let number = 3;
for (let i = 0; i < arr.length; i++)
{
if (typeof arr[i + 1] === undefined)
{
arr[0] = arr[i];
}
else if (typeof arr[i - 1] === undefined)
{
arr[arr.length - 1] = arr[0];
}
else
{
arr[i] = arr[i + 1];
}
}
console.log(arr);
}
答案 0 :(得分:6)
除了它打印[d,e,f ... a,b,c]
for(var i = 0; i < number; i++){
arr.push(arr.shift());
}
正如评论中所指出的那样(感谢@dtkaias):结果[x,y,z,a,b,c...]
for(var i = 0; i < number; i++){
arr.unshift(arr.pop());
}
unshift
函数在数组前面添加一个元素,而pop
函数删除最后一项,因此它将最后一项移到前面number
次循环。
答案 1 :(得分:4)
您正在寻找的工具是.slice
(
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice),和
.concat
(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/concat)。
function getShiftedArray (arr, n) {
var i = arr.length - n;
var front = arr.slice(0, i);
var back = arr.slice(i);
return back.concat(front);
}
答案 2 :(得分:1)
这是一个将结果复制到新数组的解决方案。时间和空间复杂度为O(arr.length)
,如果您正在寻找一个可以改变阵列并且时间复杂度O(x)
的解决方案,那么请参阅Patrick的答案。
function rotate(arr, x) {
return arr.slice(x).concat(arr.slice(0, x));
}
let arr = "abcdefghijkl".split("");
console.log(rotate(arr, -3).join(""));
&#13;
答案 3 :(得分:1)
Array.prototye.rotate()
的发明可能对这项工作很有用。让我们看一个简单的实现。
Array.prototype.rotate = function(n) {
var len = this.length;
return !(n % len) ? this.slice()
: this.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(",");
buttonLeft.addEventListener("click",rotateLeft);
buttonRight.addEventListener("click",rotateRight);
&#13;
<div id="alphabet"></div>
<button id="buttonLeft"><<</button>
<button id="buttonRight">>></button>
&#13;
答案 4 :(得分:0)
将数组拆分为2个部分,然后将它们连接起来。就是这样!
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);