2014-09-13 63 views
0

當我嘗試在javascript中設置數組中的值時,所有其他「相鄰」值也會發生更改。Javascript:在數組中設置一個值將所有其他值設置爲該值

var screenData = []; 
function init() { 
    var properties = { "property": "value" } 
    for(i = 0; i < 35; i++) { 
     var row = []; 
     for(j = 0; j < 19; j++) { 
      row.push(properties); 
     } 
     screenData.push(row); 
    } 
} 
init(); 
screenData[0][0].property = "othervalue"; 
alert(screenData[0][1].property); 

警報將返回othervalue儘管它應該是value :(

我剛纔監督東西,或這是一個錯誤

任何幫助,將不勝感激:3

回答

0

這因爲您在每次迭代中都推送相同的對象,所以您應該使用clone the object,然後使用push克隆的對象。當前,所有數組的元素都引用同一個對象。

1

這是因爲您引用同一對象(properties),因此每次修改property時都會更新。

function init() { 
    for(i = 0; i < 35; i++) { 
     var row = []; 
     for(j = 0; j < 19; j++) { 
      row.push({ property: 'value' }); 
     } 
     screenData.push(row); 
    } 
} 
0

這不是一個錯誤。您正在將對該屬性對象的引用推送到您的數組中。這意味着您的數組包含對同一對象的多個引用。您可以通過重置for循環中的屬性變量來解決此問題。

function init() { 
    for(i = 0; i < 35; i++) { 
     var row = []; 
     for(j = 0; j < 19; j++) { 
      var properties = { "property": "value" } 
      row.push(properties); 
     } 
     screenData.push(row); 
    } 
} 
0

我想,而不是這樣的:

for(j = 0; j < 19; j++) { 
     row.push(properties); 
    } 
screenData.push(row); 

這可能是:

for(j = 0; j < 19; j++) { 
     row.push(_clone(properties)); 
    } 
screenData.push(row); 

凡_.clone(對象)是下劃線的庫函數:UnderScore _clone references

注意,因爲你可以在這裏閱讀,嵌套的對象(在這種情況下,因爲這是字符串)不被引用複製。

相關問題