我有两个这样的数组:

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/

10-12 23:18