Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/375.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 如何在每个循环迭代中逐个移动数组的3个元素?_Javascript_Arrays_Loops_Recursion - Fatal编程技术网

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);
}