Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ArrayPush正在覆盖对象数组_Javascript_Arrays_Angular - Fatal编程技术网

Javascript ArrayPush正在覆盖对象数组

Javascript ArrayPush正在覆盖对象数组,javascript,arrays,angular,Javascript,Arrays,Angular,目标将表中的选定对象添加到对象数组中 我有一个数据表,每行都有一个选择复选框。 选中该复选框后,所选行(对象)将传递给方法 <ng-container #cmsTable *cdkVirtualFor="let cms of cmsContent | searchFilter: searchText : count | slice: (page-1) * pageSize : (page-1) * pageSize + pageSize">

目标将表中的选定对象添加到对象数组中

我有一个数据表,每行都有一个选择复选框。 选中该复选框后,所选行(对象)将传递给方法

 <ng-container #cmsTable *cdkVirtualFor="let cms of cmsContent | searchFilter: searchText : count | slice: (page-1) * pageSize : (page-1) * pageSize + pageSize">
                      <tr style="width: 100%; min-height: 30px;">
                          <td style="word-wrap: break-word;max-width: 200px;">{{cms.buName}}
                          </td>
                          <td style="word-wrap: break-word;max-width: 200px;">{{cms.category}}
                          </td>
                          <td style="word-wrap: break-word;max-width: 200px;">
                              {{cms.contentTitle}}</td>
                          <td style="word-wrap: break-word;max-width: 200px;"><a
                                  href="{{cms.contentURL}}" target="_blank">{{cms.contentURL}}</a>
                          </td>
                          <td style="word-wrap: break-word;max-width: 200px;"> {{cms.contentInfo}}
                          </td>
                          <td style="word-wrap: break-word;max-width: 200px;">{{cms.contentType}}
                          </td>
                          <td>
                            <div class="custom-control custom-checkbox">
                              <input type="checkbox" (change)="addToSelectedList($event, cms)">
                            </div>
                          </td>
                      </tr>
  </ng-container>
}

当进行第一次选择时,它会毫无问题地将其添加到数组中。 当进行第二次选择时,阵列将显示第二个对象两次 [{第二选择},{第二选择}] 而不是[{first selection},{second selection}]

有什么想法吗?

您只处理一个对象,可以重用和修改该对象,然后在数组中再次推送。但是,同样的对象在数组中存在两次。无论您是通过阵列的第一个插槽还是第二个插槽访问该对象,您对该对象所做的任何操作都将可见

要避免这种情况,请确保创建新对象。当您复制周围的内容时,有几个地方可以决定创建新对象。这只是您可以更改代码的众多地方之一:

更改:

  this.trainingList.push(this.currTrainSelect);
致:

您只能使用一个对象,可以重用和修改该对象,然后在数组中再次推送该对象。但是,同样的对象在数组中存在两次。无论您是通过阵列的第一个插槽还是第二个插槽访问该对象,您对该对象所做的任何操作都将可见

要避免这种情况,请确保创建新对象。当您复制周围的内容时,有几个地方可以决定创建新对象。这只是您可以更改代码的众多地方之一:

更改:

  this.trainingList.push(this.currTrainSelect);
致:


因为你在推一个引用因为你在推一个有效的引用!我完全没有看到arr.push([element1[,…[,elementN]])没有意识到。。。做我不得不选择不同的对象,cms和training除了id属性外都是类似的,因为如果我决定将分配的培训存储在单独的db表中,我可能会在后端将它们用作一个模型的主对象,而在另一个模型中使用外部对象。这与接受多个参数无关。它仍然有一个论点。
{…}
语法将生成对象的浅层副本。它类似于
Object.assign({},this.currtainselect)
,这很有效!我完全没有看到arr.push([element1[,…[,elementN]])没有意识到。。。做我不得不选择不同的对象,cms和training除了id属性外都是类似的,因为如果我决定将分配的培训存储在单独的db表中,我可能会在后端将它们用作一个模型的主对象,而在另一个模型中使用外部对象。这与接受多个参数无关。它仍然有一个论点。
{…}
语法将生成对象的浅层副本。它类似于
Object.assign({},this.currtainselect)
  this.trainingList.push({...this.currTrainSelect});