我有一个数组[1,1,1,0],但可以是数组的任何大小,数组的最小长度和数字1是3,我想继续移动1的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,1,0,0,0]-> [0,1,1,1,0,0]-> [0,0,1,1,1,0]-> [0,0,0,1,1,1]-> and so on for ever...
代码:
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);
}
答案 0 :(得分:2)
我希望你想要那个? 另见this。
如果它对您有所帮助,请提供支持。 :(
答案 1 :(得分:2)
根据您要执行的操作,我建议您使用shift()
和push()
,或pop()
和unshift()
。
基本上,shift()
和unshift()
在数组前面添加或删除元素,push()
和pop()
添加或删除元素后面的元素阵列。
对于您提供的示例,您可能希望pop()
离开数组末尾,unshift()
到前面:
function rotateArray(arr) {
var element = arr.pop();
arr.unshift(element);
}
// Repeat in loop, timeout, etc. as necessary
答案 2 :(得分:1)
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);
}