You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在JSON中实现减法表达式?寻求可行替代方案

关于在TS对象中实现价格差值计算的问题解答

嘿,我来帮你理清这个问题~首先得明确:你现在写的是TypeScript的对象字面量,不是纯JSON(JSON本身不支持任何表达式运算,只能存静态值)。当前你的写法有两个关键问题:

  • 你把oldPrice和newPrice用引号包裹成了字符串,字符串做减法会得到NaN(非数字),完全达不到计算差值的目的;
  • 在对象字面量定义时,直接引用同一对象内的其他属性是行不通的——因为对象还没创建完成,JS/TS找不到这两个变量。

下面给你几个可行的解决方案:

方案1:先创建对象,后补差值计算

先定义好基础的产品结构,之后再给目标对象添加save属性,这样就能正确访问到已存在的oldPrice和newPrice了:

export const PRODUCTS: Products[] = [
  {
    id: 1,
    productCat:'Product Cat',
    product: [
      {
        productName: 'Product Name',
        newPrice: 800,
        oldPrice: 1000
      },
    ],
  }
];

// 计算并赋值save属性
PRODUCTS[0].product[0].save = PRODUCTS[0].product[0].oldPrice - PRODUCTS[0].product[0].newPrice;

方案2:用工厂函数批量生成产品对象

如果需要创建多个产品,写一个工厂函数会更高效,每次创建时自动计算差值:

// 定义工厂函数,接收必要参数并返回带save的产品对象
function createProduct(name: string, newPrice: number, oldPrice: number) {
  return {
    productName: name,
    newPrice,
    oldPrice,
    save: oldPrice - newPrice
  };
}

export const PRODUCTS: Products[] = [
  {
    id: 1,
    productCat:'Product Cat',
    product: [
      createProduct('Product Name', 800, 1000)
    ],
  }
];

方案3:使用getter实现动态差值(自动更新)

如果你希望save的值能随着oldPrice或newPrice的修改自动更新,可以用getter属性,每次访问save时都会重新计算:

export const PRODUCTS: Products[] = [
  {
    id: 1,
    productCat:'Product Cat',
    product: [
      {
        productName: 'Product Name',
        newPrice: 800,
        oldPrice: 1000,
        // 定义getter,访问save时自动计算差值
        get save() {
          return this.oldPrice - this.newPrice;
        }
      },
    ],
  }
];

// 示例:修改价格后save会自动更新
// PRODUCTS[0].product[0].oldPrice = 1200;
// console.log(PRODUCTS[0].product[0].save); // 输出400

最后再提醒下:如果是纯JSON文件,你只能直接写save: 200这种静态值,没法写计算逻辑——只有在JS/TS代码里的对象,才能用上面这些方法实现动态计算哦~

内容的提问来源于stack exchange,提问作者Akshay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:34:39