Javascript 为什么在循环通过一个数组后重置它只在两次完整的迭代中起作用?

Javascript 为什么在循环通过一个数组后重置它只在两次完整的迭代中起作用?,javascript,arrays,loops,Javascript,Arrays,Loops,我有一个相当直截了当的问题。我想在一个数组中循环,确保不要选择相同的值两次(为此,我使用了splice将所选值移动到新数组),然后,在选择了所有值后,重新开始该过程(为此,我使用slice制作了一个副本,然后清除了旧的副本。但是,出于某种原因,无论是异步还是其他原因,我的技术只适用于两个循环完成(然后数组不会翻转)。我尝试过使用回调,但同样(缺乏)成功 有人能提出发生这种情况的原因吗?下面是我的代码,从图中可以看出,它在两次迭代中都能正常工作 var oldArray = [4441, 2444

我有一个相当直截了当的问题。我想在一个数组中循环,确保不要选择相同的值两次(为此,我使用了
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();
}
var oldArray=[44412444234364];//开始数组
var oldestArray=[];/“Holder”数组
函数getItem(){
var项目;
var指数;
如果(!oldArray.length){
//检查是否已选择所有值,然后切换数组
oldArray=oldestArray.slice();
oldestArray=[];
log('阵列已被重置');
}
index=Math.floor(Math.random()*(oldArray.length));
项目=旧阵列拼接(索引,1);
Oldestaray.push(项目[0]);
退货项目;
}
var fun=函数(){
log('这是旧数组');
console.log(oldArray);
log('这是最早的数组');
控制台日志(oldestArray);
}
对于(变量i=0;i<25;i++){
getItem();
乐趣();
}

我真的不知道Firebug控制台在做什么,但这似乎是
console.log()
记录一个在记录后发生变化的变量的问题。如果在输出数组时将其强制为字符串,则可以看到预期的输出:

console.log('This is old Array');
console.log("[" + oldArray + "]");
console.log('This is oldest Array');
console.log("[" + oldestArray + "]");

我认为您混淆了功能(ish)和异步(还有,预期的输出/契约是什么?)我希望/期望的是,项目从
oldArray
推送到
oldestArray
,然后一旦
oldArray
为空,
oldArray
oldestArray
获取所有值,循环再次开始
oldestArray
如果这看起来像是我前面问题的重复,我很抱歉t实际上是我试图澄清这个问题(我想删除它),因为这个问题与输入错误无关