能否在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
相关产品推荐
相关产品推荐

