【问题标题】:angular2: how to copy object into another objectangular2:如何将对象复制到另一个对象中
【发布时间】:2017-01-23 05:09:25
【问题描述】:

请帮助我使用 Angular 2 将对象复制到另一个对象中?

在 Angular 中,我使用 angular.copy() 将对象复制到旧对象的松散引用。但是,当我在 Angular 2 中使用相同时,出现以下错误:

错误:未定义角度。

【问题讨论】:

标签: angular typescript


【解决方案1】:

解决方案

Angular2 是在 TypeScript 和 ES6 等现代技术的基础上开发的。

所以你可以做let copy = Object.assign({}, myObject)

Object assign - 很好的例子。

对于嵌套对象let copy = JSON.parse(JSON.stringify(myObject))

【讨论】:

  • 这不适用于嵌套对象。我们如何深度复制嵌套对象?
  • 这将通过引用复制对象。如果我确实想通过引用进行复制,以避免 myObject 中的任何更改影响“复制”对象。
  • @PratapA.K 看看 loadsh,如果您可以在系统中加载另一个库。它具有_cloneDeep等功能。
  • 'Object' 仅指一种类型,但在此处用作命名空间。ts(2702)
【解决方案2】:
let copy = Object.assign({}, myObject).  as mentioned above

但这不适用于嵌套对象。所以另一种选择是

let copy =JSON.parse(JSON.stringify(myObject))

【讨论】:

  • 当嵌套对象存在时为我工作,谢谢
【解决方案3】:
let course = {
  name: 'Angular',
};

let newCourse= Object.assign({}, course);

newCourse.name= 'React';

console.log(course.name); // writes Angular
console.log(newCourse.name); // writes React

对于嵌套对象,我们可以使用 3rd 方库来深度复制对象。 如果是 lodash,请使用 _.cloneDeep()

let newCourse= _.cloneDeep(course);

【讨论】:

    【解决方案4】:

    如前所述,深层复制具有嵌套对象的对象的干净方法是使用 lodash 的 cloneDeep 方法。

    对于 Angular,您可以这样做:

    使用yarn add lodashnpm install lodash 安装lodash。

    在您的组件中,导入 cloneDeep 并使用它:

    import * as cloneDeep from 'lodash/cloneDeep';
    ...
    clonedObject = cloneDeep(originalObject);
    

    它只增加了 18kb 到您的构建中,非常值得。

    我还写了一个article here,如果您需要更深入地了解为什么要使用 lodash 的 cloneDeep。

    【讨论】:

    • 这对我有用!谢谢 :) 高级编程语言无法处理没有参考的“副本”似乎令人难以置信......
    【解决方案5】:

    您可以使用扩展运算符在 Angular 中使用 ECMAScript6 执行此操作:

    let copy = {...myObject};
    

    【讨论】:

    • 投反对票,因为副本将包含对旧对象的引用。
    【解决方案6】:

    Loadsh 是用于处理任何对象深拷贝的通用标准库。这是一个递归算法。它检查所有内容并为给定的对象进行复制。编写这种算法需要更长的时间。最好利用相同的。

    【讨论】:

      【解决方案7】:

      试试这个。

      复制一个数组:

      const myCopiedArray  = Object.assign([], myArray);
      

      复制一个对象:

      const myCopiedObject = Object.assign({}, myObject);
      

      【讨论】:

        【解决方案8】:

        Object.assign 仅适用于单级对象引用。

        要进行任何深度的复制,请使用如下:

        let x = {'a':'a','b':{'c':'c'}};
        let y = JSON.parse(JSON.stringify(x));
        

        如果想使用任何库,请使用 loadash.js 库。

        【讨论】:

          【解决方案9】:

          谢谢你上面的赛义夫。我尝试了他的建议,在我尝试了三天让我的代码工作之后,它就像一个魅力。

            this.sElectionFinal.subscribe((election) => {
           const electionCopy = Object.assign({},election)
            this.electionsFinal.push(electionCopy)})
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-05-08
            • 2011-02-07
            • 2020-01-02
            • 1970-01-01
            • 2017-09-29
            • 1970-01-01
            • 2016-04-04
            • 1970-01-01
            相关资源
            最近更新 更多