【问题标题】:Looping the values in the array循环数组中的值
【发布时间】:2013-01-22 07:31:32
【问题描述】:

我有这个功能

var globalvar = new Array();
function coor(coor1){

    for(i=0;i<=coor1.length;i++){
        exy = coor1[i].split(".");
        ex = exy[0].split("-");
        ey = exy[1].split("-");

        for(x=parseInt(ex[0]);x<=parseInt(ex[1]);x++){

            for(y=parseInt(ey[0]);y<=parseInt(ey[1]);y++){

                globalvar.push(ex[x]+"."+ey[y]);
            }
        }

    }
}

// execute function
coor(["5-7.8-9","1-2.3-4"]);

我期待的是……

globalvar 变量将在数组中包含此值

globalvar = ["5.8","5.9","6.8","6.9","7.8","7.9","1.3","1.4","2.3","2.4"];

我希望任何人都可以帮助我解决这个问题... Y_Y 因为当我使用我当前的代码时,它会返回 empty

【问题讨论】:

    标签: javascript arrays function for-loop split


    【解决方案1】:

    尽管 Arun 的答案有效,但它正在到处泄漏全局变量。

    通常,您希望保持全局空间清晰,以防止以后出现问题。

    我可以推荐一下吗:

    function coor(c) {
      for(var i = 0, l = c.length; i < l; i++) {
        var xy = c[i].split('.')
          , x  = xy[0].split('-')
          , y  = xy[1].split('-');
        for(var xi = ~~x[0]; xi <= ~~x[1]; xi++) {
          for(var yi = ~~y[0]; yi <= ~~y[1]; yi++) {
            globalvar.push(xi + '.' + yi);
          }
        }
      }
    }
    

    不过,最好不要让函数一开始就写入全局变量。在这种情况下,您将让函数返回结果,并且您可以根据需要处理这些结果。

    例如:

    function coor(c) {
      var r = [];
      for(var i = 0, l = c.length; i < l; i++) {
        var xy = c[i].split('.')
          , x  = xy[0].split('-')
          , y  = xy[1].split('-');
        for(var xi = ~~x[0]; xi <= ~~x[1]; xi++) {
          for(var yi = ~~y[0]; yi <= ~~y[1]; yi++) {
            r.push(xi + '.' + yi);
          }
        }
      }
      return r;
    }
    
    
    var globalvar = [];
    var results = coor(['5-7.8-9','1-2.3-4']);
    globalvar = globalvar.concat(results);
    

    【讨论】:

    • 这一次,我更喜欢你的答案,先生...更好...我忘记了将变量泄漏到函数外部的问题...感谢您的帮助...XD
    • 谢谢,没问题;很高兴我能提供帮助。
    【解决方案2】:

    应该这样做

    var globalvar = new Array();
    function coor(coor1){
        for(i=0;i<coor1.length;i++){ //Removed =
            exy = coor1[i].split(".");
            ex = exy[0].split("-");
            ey = exy[1].split("-");
            for(x=parseInt(ex[0]);x<=parseInt(ex[1]);x++){
                for(y=parseInt(ey[0]);y<=parseInt(ey[1]);y++){
                    console.log(y)
                    globalvar.push(x+"."+y); //need to use x & y not ex[x] & ey[y]
                }
            }
        }
    }
    coor(["5-7.8-9","1-2.3-4"])
    

    Fiddle

    【讨论】:

      【解决方案3】:

      这样应该可以的

      function floatRange(delim, rangedelim) {
          var result = [];
          var args = Array.prototype.splice.call(arguments, 2);
          for (var i = 0; i < args.length; i++) {
              var cur = args[i].toString().split(delim);
              console.log(cur)
              var floats = [cur[0].split(rangedelim), cur[1].split(rangedelim)];
              console.log(floats)
              for (var j = floats[0][0]; j <= floats[0][1]; j++) {
      
                  for (var k = floats[1][0]; k <= floats[1][1]; k++) {
                      result.push(Number(j + "." + k));
      
      
                  }
              }
              console.log(result)
          }
          return result;
      }
      console.log(floatRange(".", "-", "4-6.5-8", "6-7.8-9")); //[4.5, 4.6, 4.7, 4.8, 5.5, 5.6, 5.7, 5.8, 6.5, 6.6, 6.7, 6.8, 6.8, 6.9, 7.8, 7.9]
      

      这是一个JSBin 示例

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-11-06
        • 1970-01-01
        • 2012-02-29
        • 1970-01-01
        • 2021-06-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多