在 Angular 2 TypeScript 中深度复制数组

新手上路,请多包涵

我有一个输入对象数组。让我们称之为 content

当尝试对其进行深度复制时,它仍然具有对前一个数组的引用。

我需要复制该输入数组,并更改复制部分的一个属性。

这么久以来,我尝试了不同的方法,但都没有成功。

ES6方式:

 public duplicateArray() {
  arr = [...this.content]
  arr.map((x) => {x.status = DEFAULT});
  return this.content.concat(arr);
}

slice 方式:

 public duplicateArray() {
  arr = this.content.slice(0);
  arr.map((x) => {x.status = DEFAULT});
  return this.content.concat(arr);
}

在它们中,数组内的所有对象都有 status: 'Default'

在 Angular 2 中深度复制数组的最佳方法是什么?

原文由 Joel Almeida 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

检查这个:

   let cloned = source.map(x => Object.assign({}, x));

原文由 YD1m 发布,翻译遵循 CC BY-SA 3.0 许可协议

我在 angular devkit 中找到了深拷贝方法,这很正常,所以……也许你可以自己实现或使用它。

我比较喜欢用loadash,有很多对象和数组操作方法可以用。

 import { deepCopy } from '@angular-devkit/core/src/utils/object';

export class AppComponent {
  source = {
    ....
  }
  constructor() {
     const newObject = deepCopy(this.source);
  }
}

 Package                           Version
-----------------------------------------------------------
@angular-devkit/architect         0.1000.8
@angular-devkit/build-angular     0.1000.8
@angular-devkit/build-optimizer   0.1000.8
@angular-devkit/build-webpack     0.1000.8
@angular-devkit/core              10.0.8
@angular-devkit/schematics        10.0.8
@angular/cli                      10.0.8
@ngtools/webpack                  10.0.8
@schematics/angular               10.0.8
@schematics/update                0.1000.8
rxjs                              6.5.5
typescript                        3.9.7
webpack                           4.43.0

原文由 LiHao 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题