首页 > 解决方案 > 从对象中删除属性,同时在 Javascript / TypeScript 中保持原始对象不变

问题描述

我在打字稿中有以下产品对象:

产品:

{
    productId: 1,
    productName: "ABC",
    orders: [{
        orderId: 1,
        orderDate: "2020-01-01",
        amount: 100
    },
    {
        orderId: 2,
        orderDate: "2020-01-01",
        amount: 200
    }],
    priceHistory: [{
        date: "2020-01-1",
        price: 15
    },
    {
        date: "2020-02-1",
        price: 16
    }],
    purchaseHistory: [{
        purchaseDate: "2019-01-01",
        purchaseAmt: 10,
        qty: 20
    },
    {
        purchaseDate: "2019-02-01",
        purchaseAmt: 10,
        qty: 2
    }],
    parts: [{
        partId: 1,
        partName: "Part 1",
        priceHistory: [,,,,],
        orders: [,,,],
        purchaseHistory: [,,,,]
    },
    {
        partId: 2,
        partName: "Part 2",
        priceHistory: [,,,,],
        orders: [,,,],
        purchaseHistory: [,,,,]
    }]
}

我需要将产品对象传递给没有priceHistory 和 purchaseHistory 的 API(来自产品和零件)。

{
    productId: 1,
    productName: "ABC",
    orders: [{
        orderId: 1,
        orderDate: "2020-01-01",
        amount: 100
    },
    {
        orderId: 2,
        orderDate: "2020-01-01",
        amount: 200
    }],
    priceHistory: [],
    purchaseHistory: [],
    parts: [{
        partId: 1,
        partName: "Part 1",
        priceHistory: [],
        orders: [,,,],
        purchaseHistory: []
    },
    {
        partId: 2,
        partName: "Part 2",
        priceHistory: [],
        orders: [,,,],
        purchaseHistory: []
    }]
}

如何在不影响原始产品对象的情况下实现这一目标?我试过了:

let newProduct = originalProduct;

newProduct.priceHistory = [];
newProduct.purchaseHistory = []

newProduct.parts.forEach((part) => {
 part.priceHistory = [];
 part.purchaseHistory = [];
});

但是,它也会更新原始产品对象。我相信我们可以使用扩展 ( ...) 运算符来做到这一点,但我不确定如何复制所有属性

标签: javascripttypescriptecmascript-6

解决方案


推荐阅读