2013-01-22 67 views
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

回答

1

儘管阿倫的回答作品,是漏水全局遍佈地點。

一般來說,您希望保持全局空間清晰,以防止以後出現問題。

我可能會建議:

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); 
+0

這次,我更喜歡你的答案更多先生...這是更好的...我忘記泄漏變量的問題到外面的功能...感謝您的幫助.. XD –

+1

謝謝,沒問題;只是很高興我能幫上忙。 –

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

+0

該死!像魅力一樣工作! thnx非常多兄弟!你的一天保存...:D –

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