如何在JavaScript中保存数组的状态

时间:2017-08-09 08:17:54

标签: javascript arrays node.js

我有两个这样的数组:

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"&#39>

为了解决这个问题,首先我做了一个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循环试图一次修改所有元素,它不等待其他元素&#39;要改变的价值。它正在异步修改所有array1个元素。

然后我用array.forEach替换了循环。但它没有用,因为我无法找到一个合适的方法来停止forEeach循环。

正如你所看到的,这个问题不是火箭科学,但由于我是Javascript编程的新手,我自己无法解决这个问题。你能帮我找到解决这个问题的有效方法吗?感谢。

1 个答案:

答案 0 :(得分:2)

要解决此类问题,我认为最好使用promises,您希望同步多个异步更改,使用promises很容易找到所有更改完成后。

请参阅以下代码段

&#13;
&#13;
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));
}
&#13;
&#13;
&#13;