Удалить элемент в массиве, не удаляя объект, на который он указывает - PullRequest
0 голосов
/ 09 марта 2012

У меня есть что-то вроде этого

var myArray = [];
myArray.push(someObject);

но затем, если я удаляю или склеиваю эту запись массива, которую я только что нажал, она также удаляет someObject (someObject был передан по ссылке нажатием, а не клоном, и я не могу сделать его клоном). Есть ли способ, которым я могу:

  1. просто удалите указатель на someObject из myArray без фактического удаления someObject
  2. он должен удалить действительный ключ для объекта в массиве, но не сдвинуть все остальные ключи в массиве?

1 Ответ

1 голос
/ 09 марта 2012

someObject не будет удален, если какая-то другая переменная или объект в вашем javascript имеет ссылку на someObject. Если никто не имеет ссылки на него, то он будет собирать мусор (очищаться интерпретатором javascript), потому что, когда никто не ссылается на него, он все равно не может быть использован вашим кодом.

Вот соответствующий пример:

var x = {};
x.foo = 3;

var y = [];
y.push(x);
y.length = 0;   // removes all items from y

console.log(x); // x still exists because there's a reference to it in the x variable

x = 0;          // replace the one reference to x
                // the former object x will now be deleted because 
                // nobody has a reference to it any more

Или сделано иначе:

var x = {};
x.foo = 3;

var y = [];
y.push(x);      // store reference to x in the y array
x = 0;          // replaces the reference in x with a simple number

console.log(y[0]); // The object that was in x still exists because 
                   // there's a reference to it in the y array

y.length = 0;      // clear out the y array
                   // the former object x will now be deleted because 
                   // nobody has a reference to it any more
...