我有包含数组的响应对象:
Cars:
[0]: {
Name: 'Name1',
Color: 'Color2'
},
[1]: {
Name: 'Name2',
Color: 'Color2'
},
Run Code Online (Sandbox Code Playgroud)
我想复制数组中的第一项并将其放到对象中,Cars必须看:
Cars:
{
Name: 'Name1',
Color: 'Color'
},
Run Code Online (Sandbox Code Playgroud)
如果您在内存中描述内容,并Cars引用包含对象的数组,并且您的目标是Cars仅引用这些对象中的第一个,则可以执行以下操作:
Cars = Cars[0];
Run Code Online (Sandbox Code Playgroud)
如果Cars变量是唯一一个引用该数组的变量,那么该数组就有资格进行垃圾回收.如果数组对另一个对象的引用是对该对象的唯一引用,则该另一个对象([1])也有资格进行垃圾回收.
一些ASCII艺术可能会有所帮助:
首先,你有这个:
+-----------------+
+------+ +---------+ +--->| (object) |
| Cars |----->| (array) | | +-----------------+
+------+ +---------+ | | Name: 'Name1' |
| 0 |---+ | Color: 'Color2' |
| 1 |---+ +-----------------+
+---------+ |
| +-----------------+
+--->| (object) |
+-----------------+
| Name: 'Name2' |
| Color: 'Color2' |
+-----------------+
然后你做的时候:
Cars = Cars[0];
Run Code Online (Sandbox Code Playgroud)
你有这个:
+------+
| Cars |--------------------+
+------+ |
| +-----------------+
+---------+ +--->| (object) |
| (array) | | +-----------------+
+---------+ | | Name: 'Name1' |
| 0 |---+ | Color: 'Color2' |
| 1 |---+ +-----------------+
+---------+ |
| +-----------------+
+--->| (object) |
+-----------------+
| Name: 'Name2' |
| Color: 'Color2' |
+-----------------+
请注意,没有任何东西指向数组,所以如果发生垃圾收集,你最终得到这个:
+------+ +-----------------+
| Cars |----->| (object) |
+------+ +-----------------+
| Name: 'Name1' |
| Color: 'Color2' |
+-----------------+
当然,如果其他东西确实有对数组的引用,那么该数组将不会是GC'd(并且类似地,如果其他东西具有对第二个对象的引用,则它将不是GC'd).但是,如果我们假设其他任何东西都没有这些参考,那就会发生