【问题标题】:Typescript keeps reference and leaves two objects the same打字稿保持引用并保持两个对象相同
【发布时间】:2021-08-01 22:54:46
【问题描述】:

复制数组的最后一个位置,并修改接收到最后一个值的对象,但最终也会修改最后一个位置,使两个对象保持不变。

    const visitOfTheLunch = visitMounting[visitMounting.length - 1];

    visitOfTheLunch.visitPoint.name = 'almoço';

    visitOfTheLunch.lunch = true;

    visitOfTheLunch.waypoint.estimatedArrival = visitMounting[visitMounting.length - 1].waypoint.estimatedDeparture;
    const backHourOfTheLunch = new Date(visitMounting[visitMounting.length - 1].waypoint.estimatedDeparture);
    backHourOfTheLunch.setHours(backHourOfTheLunch.getHours() + 2);
    visitOfTheLunch.waypoint.estimatedDeparture = backHourOfTheLunch;
    console.log(visitMounting[visitMounting.length - 1])
    console.log(visitOfTheLunch)
    visitMounting = [...visitMounting, visitOfTheLunch];

【问题讨论】:

  • 听起来您将同一个对象放在数组的两个位置。然后,当您修改该对象的属性之一的值时,无论您查看数组中的哪个点,您都会看到该修改,因为两个点都指向同一个对象。请使用 minimal reproducible example 来更新您的问题,以展示问题,最好是使用 Stack Snippets([<>] 工具栏按钮)的 runnable 问题; here's how to do one.
  • visitOfTheLunchvisitMounting[visitMounting.length - 1] 是同一个对象。对 1 所做的任何更改也是对另一个的更改。

标签: javascript typescript nestjs


【解决方案1】:

我使用了深拷贝技术,我们丢失了原始对象的引用。

const visitOfTheLunch = deep(visitMounting[visitMounting.length - 1]);

function deep<T extends object>(source: T): T {
    return JSON.parse(JSON.stringify(source))
}

【讨论】:

    猜你喜欢
    • 2013-09-23
    • 2016-05-25
    • 1970-01-01
    • 2019-06-12
    • 2017-08-25
    • 1970-01-01
    • 1970-01-01
    • 2015-11-26
    • 1970-01-01
    相关资源
    最近更新 更多