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实际上是我试图澄清这个问题(我想删除它),因为这个问题与输入错误无关