如何在每次循环迭代中一个一个地移动数组的 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);
}
我有一个数组[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);
}