代码之家  ›  专栏  ›  技术社区  ›  user3299601

在for in循环结束时更新

  •  0
  • user3299601  · 技术社区  · 11 年前

    我试图让这个循环在列表的1-27之间运行,但我认为它在列表中循环,并且只为列表中的最后一项提供输出。我想我希望它在每次循环时更新变量。

    我只获得“27”(列表中的最后一项)的输出,或者如果我将它们全部删除,那么我将获得“1”的输出(见下文)。

    有人知道这是怎么做到的吗?

    var regionslist = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27];
    
    var justthisregion;
    var pndsplusthisregion;
    var test;
    
    var regionsplusponds = function (regionslist){
    
          for (var i in regionslist) {
            justthisregion = finregions.remap([regionslist[i]],[1000],0);
          }
          pndsplusthisregion = justthisregion.add(justponds);
    
          if (pndsplusthisregion===2000) {
              test = finregions.remap([regionslist[i]],[2000])
    
          } else {
              test = finregions.remap([regionslist[i]],[999])
          }
          addToMap(test, {min:0, max:2000, palette:['ff0033','993366','003366'], opacity:0.5}, "Regions with Ponds");
    };
    
    2 回复  |  直到 11 年前
        1
  •  0
  •   gfrobenius    11 年前

    你的循环太快了。这是 只有 线路运行27次 justthisregion = finregions.remap([regionslist[i]],[1000],0); 所以 justthisregion 最终只会保持上次的互动。移动您的 } 向下

    var regionsplusponds = function (regionslist){
      for (var i in regionslist)
      {
        justthisregion = finregions.remap([regionslist[i]],[1000],0);
        pndsplusthisregion = justthisregion.add(justponds);
        if (pndsplusthisregion===2000)
          test = finregions.remap([regionslist[i]],[2000]);
        else
          test = finregions.remap([regionslist[i]],[999]);
        addToMap(test, {min:0, max:2000, palette:['ff0033','993366','003366'], opacity:0.5}, "Regions with Ponds");
      } /* <-- this was your problem line */
    };
    
        2
  •  0
  •   DiddySinatra    11 年前

    啊,你的循环并没有包含你试图迭代的所有逻辑。试试这个:

    var regionsplusponds = function (regionslist){
        for (var i in regionslist) {
            justthisregion = finregions.remap([regionslist[i]],[1000],0);
            pndsplusthisregion = justthisregion.add(justponds);
        if (pndsplusthisregion===2000){
            test = finregions.remap([regionslist[i]],[2000])}
        else{
            test = finregions.remap([regionslist[i]],[999])}
        addToMap(test, {min:0, max:2000, palette:['ff0033','993366','003366'], opacity:0.5}, "Regions with Ponds");}
    };
    

    for循环只重新分配了这个区域27次,然后继续运行剩下的代码一次。我将for循环的右括号从以下行移到后面:

    justthisregion = finregions.remap([regionslist[i]],[1000],0);}
    

    到此行之后:

    addToMap(test, {min:0, max:2000, palette:['ff0033','993366','003366'], opacity:0.5}, "Regions with Ponds");}
    

    这应该奏效。