Javascript 如何在每个循环迭代中逐个移动数组的3个元素?
我有一个数组Javascript 如何在每个循环迭代中逐个移动数组的3个元素?,javascript,arrays,loops,recursion,Javascript,Arrays,Loops,Recursion,我有一个数组[1,1,1,0](任意大小),数组和数字1的最小长度为3。我想继续向上移动1s1元素的值,以便它可以移动到[0,1,1,1],然后返回到[1,1,1,0] 我的循环在递归模式下工作,但我不确定如何重置值,因此在4个循环之后,我的整个数组都充满了0 更长一点的数组将按如下方式遍历: 例如: [1,1,1,0,0,0]-> [0,1,1,1,0,0]-> [0,0,1,1,1,0]-> [0,0,0,1,1,1]-> [1,1,0,0,0,1]-> [1
[1,1,1,0]
(任意大小),数组和数字1的最小长度为3。我想继续向上移动1s1元素的值,以便它可以移动到[0,1,1,1]
,然后返回到[1,1,1,0]
我的循环在递归模式下工作,但我不确定如何重置值,因此在4个循环之后,我的整个数组都充满了0
更长一点的数组将按如下方式遍历:
例如:
[1,1,1,0,0,0]-> [0,1,1,1,0,0]-> [0,0,1,1,1,0]-> [0,0,0,1,1,1]->
[1,1,0,0,0,1]-> [1,1,1,0,0,0]-> [0,1,1,1,0,0]-> [0,0,1,1,1,0]->
永远如此
代码:
功能翻转(图像,活动){
var new_active=active;
setTimeout(函数(){
active.reverse();
活动[活动长度]=0;
active.reverse();
active.pop();
对于(变量i=0;i
- 第一个pop(存储它)。所以[abcd]->[abc]并且您已经存储了d
- 相反。所以[abc]->[cba]
- 添加弹出的元素。所以[cba]->[cbad]
- 相反。所以[cbad]->[dabc]
如果对你有帮助,请投票(根据您想做的方向,我建议使用and或and 基本上,
shift()
和unshift()
从数组前面添加或删除元素,以及push()
和pop()
从数组后面添加或删除元素
对于您给出的示例,您可能希望将pop()
从数组的末尾移出,并将unshift()
放到前面:
function rotateArray(arr) {
var element = arr.pop();
arr.unshift(element);
}
// Repeat in loop, timeout, etc. as necessary
不太明白你想做什么。是[1,1,1,0]->[0,1,1,1]->[1,0,1,1]->[1,1,0,1]->[1,1,1,0]好吗?给我们一个例子。我添加了一个较大数组大小的例子。这很容易理解。也许它被称为旋转,你看到这三个答案了吗?多亏了
push()
/pop()
和unshift()
/shift()
,您不需要反转数组。请参阅我的答案:。这很公平。您从算法角度的想法是正确的;只需将此作为另一个学习机会。:-)啊,这正是我需要的示例。谢谢。您还可以添加一个dir
参数(direction)并实现如下:函数rotatarray(arr,dir){dir=!dir | | dir>0;arr[dir?“unshift”:“push”](arr[dir?”pop:“shift”]();}
-看到了吗
function rotateArray(arr) {
var element = arr.pop();
arr.unshift(element);
}
// Repeat in loop, timeout, etc. as necessary
var arr = [1, 1, 1, 0, 0, 0],
startIndex = arr.indexOf(1),
sliceLength = 3,
slice;
while(arr[arr.length - 1] === 0) {
// slice out the 1's (modifies the original array)
slice = arr.splice(startIndex, sliceLength);
// splice the 1's back in, one spot over
arr.splice.apply(arr, [++startIndex, 0].concat(slice));
console.log(arr);
}