我有一个相当直截了当的问题。我想遍历一个数组,确保不要两次选择相同的值(我使用splice
将所选值移动到一个新数组),然后,当选择了所有值时,启动进程结束(为此我使用slice
制作副本,然后清除旧的副本。但是,由于某种原因,无论是异步还是什么,我的技术只适用于两个循环完成(然后数组做我没有尝试使用回调,但也有相同(缺乏)的成功。
有人能说出为什么会这样吗?我的代码在下面,你可以从图片中看到它可以正常工作两次迭代。
var oldArray = [4441, 2444, 2343, 64]; //Beginning array
var oldestArray = []; //"Holder" array
function getItem() {
var item;
var index;
if(!oldArray.length) {
//Check to see if all values have been selected, then switch arrays
oldArray = oldestArray.slice();
oldestArray = [];
console.log('The arrays have been reset');
}
index = Math.floor(Math.random() * (oldArray.length));
item = oldArray.splice(index, 1);
oldestArray.push(item[0]);
return item;
}
var fun = function() {
console.log('This is old Array');
console.log(oldArray);
console.log('This is oldest Array');
console.log(oldestArray);
}
for(var i = 0; i < 25; i++) {
getItem();
fun();
}
答案 0 :(得分:0)
我无法弄清楚Firebug控制台正在做什么,但这似乎是console.log()
ging一个变量在记录后发生变化的问题。如果在输出数组时将数组强制转换为字符串,则可以看到预期的输出:
console.log('This is old Array');
console.log("[" + oldArray + "]");
console.log('This is oldest Array');
console.log("[" + oldestArray + "]");