如何在每个 FOR 循环步骤后执行 运行 函数

How to run function after each FOR loop step

我需要将对象从数组 pts 一个一个地传输到数组 test ,每次之后我都需要用数组 test

调用函数 mimicSvg

我什么都试了:

var test=[{"X":"300","Y":"400"}];
setTimeout(function () {
    for(var m=1;m<25;m++){
    var q = pts[m].X;
    var e = pts[m].Y;
    console.log(test);
    test.push({"X":q,"Y":e});
    mimicSvg(test,1);

    }
    }, 1000);

还有这个:

var test=[{"X":"300","Y":"400"}];
for(var m=1;m<pts.length;m++){

    var q = pts[m].X;
    var e = pts[m].Y;
    console.log(test);
    test.push({"X":q,"Y":e});
    alert(m);
  setInterval(mimicSvg, 2000, test, 1);

  }

还有这个:

setTimeout( "mimicSvg(test,1);test.push({"X":q,"Y":e});",m*3000 );

与此类似:

setTimeout(function() {mimicSvg(test,1); test.push({"X":q,"Y":e});},m*3000 );

但每次传输后我都无法 运行 运行... 我的控制台看起来像这样:

和:

我很困惑...我哪里错了?为什么我不能得到这样的测试:

after 1. loop array[1] -> run function with this array
after 2nd loop array[2] -> run function ...
etc....

已编辑 试试这个:

var set_time;
var m = 0;
var add_array = function(){
    if(m < pts.length){
       var q = pts[m].X;
       var e = pts[m].Y;
       console.log(test);
       test.push({"X":q,"Y":e});
       mimicSvg(test,1);
       m++;
       set_time = setTimeout(add_array,1000);//it call itself again and again until m is more than the length of the array'
    }
}
set_time = setTimeout(add_array,1000);

我认为您的问题是 for 运行 您所有数组的功能立即生效。
我想你想 运行 每 1 秒执行一次该函数,这就是解决方案。
它被称为 "Rucursion" 此函数将调用自身,直到 m 大于数组的长度 (if(m < pts.length))。
如果这不是你想要的,请向我解释更多细节。
希望对您有所帮助:)

我认为您添加 setTimeoutsetInterval 方法会使事情复杂化。你不能简单地 运行 循环中的 mimicSvg 调用吗?假设这是正确的,这是我的解决方案:

  /** assuming pts and mimicSvg is available in this scope */

  var testData = [{x: 300, y:400}];

  for(var m=1;m<pts.length;m++){
    var pt = pts[m];
    var itemForTest = {X: pt.X, Y: pt.Y}

    console.log("Test Data at iteration " + m, testData);

    testData.push(itemForTest);

    mimicSvg(testData, m);

  }

如果 setTimeoutsetInterval 调用有充分的理由,请解释为什么需要这些调用。