如何从数组中剪切对象并将其放入对象本身

use*_*173 0 javascript

我有包含数组的响应对象:

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)

T.J*_*der 5

如果您在内存中描述内容,并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).但是,如果我们假设其他任何东西都没有这些参考,那就会发生

  • 你真的知道如何写出糟糕问题的答案.必须奖励这样的努力:) (3认同)