我有两个这样的数组:
var array1 = ["apple", "pear", "cherry", "orange", "mango"];
var array2 = [false, false, false, false, false];
当我浏览
array1
时,我修改了它的一些元素。我将array2
中的各个元素都设为true。例如,如果array1
变为["apple", "pearX", "cherry", "orange", "mango"]
array2
变为:[false, true, false, false, false]
我将不再修改
"pearX"
,因为它在array2
中是正确的。当array1
都变为array2
时,我应该停止修改true
。此外,我不能一次修改所有array1
,因为"apple"
的值可能取决于"pear"
的值。为了解决这个问题,首先我创建了一个for循环并将其放入while循环中,如下所示:
var isComplete = false
while(isComplete == false)
{
for(var i = 0; i < array1.length; i++)
{
// do some stuff
if(/*all elements in array2 is true*/)
{
isComplete = true;
break;
}
}
}
这是行不通的,因为for循环试图立即修改所有元素,而不是等待其他元素的值更改。它正在异步修改所有
array1
元素。然后我用array.forEach代替了循环。但这没有用,因为我找不到停止forEeach循环的正确方法。
如您所见,这个问题不是火箭科学,但我自己无法解决,因为我是Java语言编程的新手。您能帮我找到解决此问题的可行方法吗?谢谢。
最佳答案
为了解决此类问题,我认为最好使用promises,您希望同步多个异步更改,使用promises可以很容易地在所有更改完成后就发现。
请参阅以下代码段
var array1 = ["apple", "pear", "cherry", "orange", "mango"];
var array2 = [false, false, false, false, false];
var promises = [];
for (let i = 0; i < array1.length; i++) {
let p = new Promise(function(resolve, reject) {
setTimeout(function() {
array1[i] += "X";
array2[i] = true;
resolve(array1[i]);
}, randomRange(100,500));
});
promises.push(p);
}
Promise.all(promises).then(values => {
console.log(values);
});
function randomRange(min, max) {
return min + Math.floor(Math.random() * (max - min + 1));
}
关于javascript - 如何在JavaScript中保持数组的状态,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45585243/