循环数组中的值

时间:2013-01-22 07:31:33

标签: javascript arrays function for-loop split

我有这个功能

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

3 个答案:

答案 0 :(得分: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"])

Fiddle

答案 1 :(得分: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);

答案 2 :(得分: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示例