2016-08-08 5 views
2

У меня есть многомерный массив с различными типами переменных, например:JavaScript указателей массив или #define для сокращения

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

См. [Обмен вызовами (Object)] (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

ок, спасибо, я понимаю. Моя проблема заключалась в том, что я создал переменную, называемую до заполнения основного массива.

Это связано с тем, что я создаю пустую структуру массива, но последовательно заполняется событиями программы.

сейчас, чтобы решить проблему. Я создаю переменную соединения после первого нажатия на основной массив.

Большое спасибо за вашу доступность.

 Смежные вопросы

  • Нет связанных вопросов^_^