为什么在循环后重置数组只能进行两次完整的迭代?

时间:2014-06-11 03:34:20

标签: javascript arrays loops

我有一个相当直截了当的问题。我想遍历一个数组,确保不要两次选择相同的值(我使用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();
}

enter image description here

1 个答案:

答案 0 :(得分:0)

我无法弄清楚Firebug控制台正在做什么,但这似乎是console.log() ging一个变量在记录后发生变化的问题。如果在输出数组时将数组强制转换为字符串,则可以看到预期的输出:

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

http://jsfiddle.net/W7c9C/1/