如何在每次循环迭代中一个一个地移动数组的 3 个元素?

How to move 3 elements of array one by one in each of loop iterations?

我有一个数组[1,1,1,0](任意大小),数组和数字1的最小长度是3。我想继续将1s 1元素的值向上移动,这样它就可以移动到[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]->

以此类推……

代码:

function flip(images, active) {
    var new_active = active;

    setTimeout(function() {
        active.reverse();
        active[active.length] = 0;
        active.reverse();
        active.pop();

        for(var i = 0; i < active.length; i++) {
            alert(active[i]);
        }

        flip(images, active);
    }, 5000);
}
  • 首先 pop(store it). 所以 [abcd]->[abc] 你已经存储了 d.
  • 反转。所以 [abc]->[cba].
  • 添加弹出元素。所以 [cba]->[cbad]
  • 反转。所以 [cbad]->[dabc].

我希望你想要那个? 也见this


如果对您有帮助,请点个赞。 :(

根据你想做的方向,我建议使用shift() and push(), or pop() and unshift()

基本上,shift()unshift()从数组的前面添加或删除一个元素,push()pop()从数组的后面添加或删除一个元素数组的

对于您给出的示例,您可能希望 pop() 离开数组的末尾并 unshift() 到前面:

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

http://jsfiddle.net/sn7ujb90/1/