2016-08-08 16 views
2

我有不同類型的變量的多維陣列,像這樣:JavaScript的指針數組或爲#定義縮寫

array = [ [[file, name, visible], [ArrayPoint, ArrayOther], ...], [[file2,...], ..] ] 
現在

在我的代碼多次我必須調用(例如)陣列()位於myArray [X] [1] [0]中的點。

我想知道是否有可能創建定義或指向數組位置來縮短代碼,因爲通常我不記得變量的位置。

// access the value at the address available in pointer 
var *pointArray = &myArray[X][1][0]; 

// my code 
*pointArray.push(pint_x, point_y); 

============== VS ============== 

myArray[X][1][0].push(pint_x, point_y); 

非常感謝你!晚上好。

Marco。

+2

JavaScript沒有指針/引用類型,但是隻需使用一個普通變量即可完成,因爲JavaScript使用按共享方式傳遞。 – 4castle

+0

請參閱[由(對象)共享調用](https://en.wikipedia.org/wiki/Evaluation_strategy#Call_by_sharing):「但是,*因爲該函數可以訪問與調用方相同的對象(不進行復制)這些對象的突變對調用者是可見的,因爲該對象不被複制或克隆* - 它是共享的。「 JavaScript中的任何變量賦值都適用相同的規則。 – user2864740

回答

1

如果你

var pointArray = myArray[X][1][0]; 

它將在myArray[X][1][0]使參考數組的一個副本。因此,pointArray元素的任何後續突變也將改變myArray[X][1][0]的元素。

請注意,重新分配新值到pointArray作爲一個整體不會影響myArray[X][1][0],因爲這隻會使pointArray存儲其他東西。

賦值不會在JavaScript中複製/克隆對象,它們只會使左側的變量引用與右側相同的對象。

var outer = [[0,1,2],[3,4,5]]; 
 
var inner = outer[1]; 
 

 
inner.push(6); 
 
console.log(JSON.stringify(outer)); 
 

 
inner = []; 
 
console.log(JSON.stringify(outer));

+0

我更喜歡簡單地說「賦值不*在JavaScript中複製/克隆對象」。此行爲可以用[由(對象)共享調用](https://en.wikipedia.org/wiki/Evaluation_strategy#Call_by_sharing)來解釋。 – user2864740

+0

@ user2864740但是,這不是描述他們***做的事情。我寧願描述他們是什麼,而不是描述他們不是什麼。 – 4castle

+0

一旦建立了該規則,就很容易實現:對象本身就是一個對象,隨時隨地對該對象所做的更改都會影響它。 – user2864740

0

好的,謝謝,我明白了。 我的問題是我創建了填充主數組之前調用的變量。

這是因爲我創建了空的數組結構,而是由程序事件連續填充。

現在解決問題我在第一個事件推送到主數組後創建連接變量。

非常感謝您的可用性。