2013-03-26 25 views
0

jiddle - 我已經創建了x*y array函數,其中一些默認值爲value。我想這個值是一些數組2長。但它似乎通過傳遞new Array(2)作爲parameter它總是傳遞相同的對象,所以稍後更改數組中的任何單元格影響所有它們。如何使此陣列的每個單元的每個default值都相同,但是也是independentJS與函數參數相同的對象

在FIDLE我改變一些領域和報警等領域依賴於第一個,因爲每個單元的值具有默認值相同的對象。

+0

撥打(淺)複製:'結果[i] [j] = value.slice();' – 2013-03-26 00:25:19

+0

將它與每一種類型的值參數的工作?字符串/多維數組等? – OPOPO 2013-03-26 00:26:26

+0

對於您需要創建數組 – 2013-03-26 00:27:19

回答

1

我已經創建了具有某種默認值的x*y數組的函數。我想這個值是一些陣列2長

但那就不是一個x*y 2維數組了,而是一個x*y*2 3維數組!爲此,你需要一個不同的功能。

它似乎通過傳遞new Array(2)作爲參數它總是傳遞相同的對象,所以稍後更改數組中的任何單元格影響所有這些。

是的。 new Array(2)創建一個對象,並且您的代碼構造與每一個字段指向它的2維陣列。

如何讓他們獨立?

你需要使用不同的功能,如

function newB(x, y, z) { 
    var result = new Array(x); 
    for (var i=0; i<x; i++) { 
     result[i] = new Array(y); 
     for (var j=0; j<y; j++) { 
      result[i][j] = new Array(z); 
     } 
    } 
    return result; 
} 

var fields = newA(5, 5, 2); 

或者使其更一般情況下,你可以使用一些工廠函數作爲一個參數,它構建了獨立值:

function newB(x, y, valuemaker) { 
    if (typeof valuemaker != "function") { 
     var value = valuemaker || 0; 
     valuemaker = function(){ return value; }; 
    } 
    var result = new Array(x); 
    for (var i=0; i<x; i++) { 
     result[i] = new Array(y); 
     for (var j=0; j<y; j++) { 
      result[i][j] = valuemaker(); 
     } 
    } 
    return result; 
} 

var fields = newA(5, 5, function() { 
    return new Array(2); 
}); 
相關問題