2014-02-17 71 views
0

我遇到了一個問題,我迭代計算並將值存儲到對象中的不同數組中,但只有最終迭代值最終保存在對象的不同部分。JavaScript內存賦值

在這裏的圖片中,我有控制檯輸出值minY和maxY。

enter image description here

我再檢查儲存在我的陣列之前,我去使用它的價值。

enter image description here

有沒有解決這個辦法嗎?第二張照片中的這些值是最終被使用的值,它阻止我前進。

編輯:我使用分配循環:

for (var i = 0; i < partitions; i++) { 
     var cellObject = new Object(); 
     cellObject.minX = sceneBounds.min[0] + boxLength * i; 
     cellObject.maxX = sceneBounds.min[0] + boxLength * i + boxLength; 

     for (var j = 0; j < partitions; j++) { 

      cellObject.minY = sceneBounds.min[1] + boxWidth * j; 
      cellObject.maxY = sceneBounds.min[1] + boxWidth * j + boxWidth; 
      for (var k = 0; k < partitions; k++) { 

       // int index = height*width*k + width*j; 
       var index = partitions * partitions * k + partitions * j; 
       cellObject.minZ = sceneBounds.min[2] + boxHeight * k; 
       cellObject.maxZ = sceneBounds.min[2] + boxHeight * k + boxHeight; 

       cellObject.objectList = []; 
       cellArray[index + i] = cellObject; 
      } 
     } 
    } 

回答

1

這是不完全清楚你的要求,但它似乎是參考共享的情況下。

聲明本:

a = b = {}; 
a.x = 7 
console.log(b.x); // 7 

或等價

a = {}; 
b = a; 
a.x = 7 
console.log(b.x); // 7 

a = {}; 
b = {}; 
a.x = 7; 
console.log(b.x) // undefined 

確保你沒有初始化 「的對象不同陣列」 具有相同的文字。

+0

我已經添加了我使用的循環。這看起來像你所引用的東西嗎? –

+0

是的。你在第二行每次迭代創建一個對象,然後在最後一行使用同一個對象來處理每個'j'和'k'迭代中的'cellArray'賦值。最後一行不會複製'cellObject',它會說'cellArray'是*那個對象* - 對於所有不同的'j'和'k'都是同一個。你需要在'k'循環中創建一個新的對象以具有不同的非共享對象。使用局部變量保持'minX','maxX','minY'和'maxY'的值,並且只將它們賦值給'k'循環內的'cellObject'。 – Amadan