2015-05-28 26 views
1

如何正確限定我的startA變量,以便它是我向結果數組推送的第一個數組?變量在按入陣列時沒有保持正確的數組

正如你可以從我的輸出結果看到的,我推入到結果數組中的第一個數組實際上是我的結束數組。

這是一個變量範圍問題?因爲,我已經預先定義啓動市場變量保持初始起始值([1,1]),爲什麼我啓動市場變量的輸出仍是[7,7]這不是一個按值複製,因爲它是一個原始類型而不是引用類型?

// Tick Toward 
function tickToward(start, end) { 
    var startA = start; 
    var results = []; 
    results.push(startA); 
    for (var i = 0; i < start.length; i++) { 
     if (start[i] < end[i] && start[i + 1] < end[i + 1]) { 
      start[i] += 1; 
      start[i + 1] += 1; 
      var a = [start[i],start[i+1]]; 
      results.push(a); 
      // console.log("Condition 1"); 
      i--; 
     } else if (start[i] > end[i] && start[i + 1] > end[i + 1]) { 
      start[i] -= 1; 
      start[i + 1] -= 1; 
      var b = [start[i],start[i+1]]; 
      results.push(b); 
      // console.log("Condition 2"); 
      i--; 
     } else if (start[i] > end[i] && start[i + 1] < end[i + 1]) { 
      start[i] -= 1; 
      start[i + 1] += 1; 
      var c = [start[i],start[i+1]]; 
      results.push(c); 
      // console.log("Condition 3"); 
      i--; 
     } else if (start[i] < end[i] && start[i + 1] > end[i + 1]) { 
      start[i] += 1; 
      start[i + 1] -= 1; 
      var d = [start[i],start[i+1]]; 
      results.push(d); 
      // console.log("Condition 4"); 
      i--; 
     } else if (start[i] > end[i] && start[i + 1] == end[i + 1]) { 
      start[i] -= 1; 
      var e = [start[i],start[i+1]]; 
      results.push(e); 
      // console.log("Condition 5"); 
      i--; 
     } else if (start[i] < end[i] && start[i + 1] == end[i + 1]) { 
      start[i] += 1; 
      var f = [start[i],start[i+1]]; 
      results.push(f); 
      // console.log("Condition 6"); 
      i--; 
     } else if (start[i] == end[i] && start[i + 1] > end[i + 1]) { 
      start[i + 1] -= 1; 
      var g = [start[i],start[i+1]]; 
      results.push(g); 
      // console.log("Condition 7"); 
      i--; 
     } else if (start[i] == end[i] && start[i + 1] < end[i + 1]) { 
      start[i + 1] += 1; 
      var h = [start[i],start[i+1]]; 
      results.push(h); 
      // console.log("Condition 8"); 
      i--; 
     } 
    } console.log(results); 

} 


tickToward([1, 1], [7, 7]); // Output should be [ [ 1, 1 ], [ 2, 2 ], [ 3, 3 ], [ 4, 4 ], [ 5, 5 ], [ 6, 6 ], [ 7, 7 ] ] 

// However, my output is [ [ 7, 7 ], [ 2, 2 ], [ 3, 3 ], [ 4, 4 ], [ 5, 5 ], [ 6, 6 ], [ 7, 7 ] ] 

這裏的問題,如果有人有興趣: http://i.stack.imgur.com/5UR5T.png

回答

2

這不是一個按值拷貝自原始類型,而不是引用類型?

var startA = start; 

此行是造成問題的原因。它創建了一個參考而不是個人副本。

您需要使用'slice()'來克隆數組。

var startA = start.slice(); 

Demo

+0

謝謝。看起來像數組是一個複雜的類型,它是參考類型。我假設它是一種原始類型。 – cusX