0

我有这个功能

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

4

3 回答 3

1

这应该这样做

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"])

小提琴

于 2013-01-22T07:40:09.943 回答
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);
于 2013-01-22T08:03:26.473 回答
0

像这样的东西应该工作

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示例

于 2013-01-22T07:59:26.283 回答