【问题标题】:Javascript loop array in realtimeJavascript实时循环数组
【发布时间】:2018-08-17 13:42:56
【问题描述】:

有没有办法在 Javascript 或使用 JQuery 中“实时”循环数组?我的意思是创建一个循环,在开始循环之前读取数组内容而不缓存它,例如,如果我这样做。

var array = [{'hi':0},{'how':1},{'are':2},{'you':3}];

for(var i=0;i < array.length;i++){
  console.log(i);
  if(i == 2){
    array.push({'?':4});
  }
}
console.log(array);

循环将只输出 4 个值,但在完成循环之前它已经有 5 个值

我还想在循环运行时循环插入的新值。

为了更清楚,我需要这样做,因为我正在构建一个 web 应用程序,它在向服务器提交数据之前创建一个队列,一个循环提交数组中的数据,但这个数组也可以在进程中由其他人更新功能

谢谢!

【问题讨论】:

  • 它输出 5 个值。你的问题不清楚。
  • @AnkitAgarwal 他的问题对我来说很清楚 - 他想在循环期间改变数组,并希望在对数组进行插入时循环继续进行
  • @duxfox-- 是的,但他说它只记录了 4 个值,但事实并非如此,循环正在记录整个数组,包括循环内添加的值,所以是 5 个值跨度>
  • 您是否忘记了索引从零开始,而 4 实际上是第 5 次迭代?
  • 向您的代码添加更多日志记录详细信息,您将看到在循环结束时添加的索引。 console.log(i, JSON.stringify(array[i]));

标签: javascript jquery arrays loops


【解决方案1】:

您的代码可以按您的意愿工作。它之所以有效,是因为在每次迭代中,您都会根据 array.length 评估 i,因此即使在一次迭代中长度发生变化,循环也会相应地进行调整。

如果你使用它不会工作:

for(var i=0, j=array.length; i<j; i++){

因为在这种情况下,长度存储在j 中,然后j 不会改变,无论循环中发生了什么。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-19
    • 2012-07-09
    • 2018-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多