Typescript使用接口创建JSON对象

Typescript使用接口创建JSON对象,json,typescript,Json,Typescript,我需要在JSON字段中为PostgreSQL中的存储构建一个自定义JSON对象,并使用typescript来完成此操作 在我的测试案例中,我有以下代码: interface Product { id: number, quantity: number, } let prod: Product = {} as any; interface Products extends Array<Product>{} let productItems : Products = []; l

我需要在JSON字段中为PostgreSQL中的存储构建一个自定义JSON对象,并使用typescript来完成此操作

在我的测试案例中,我有以下代码:

interface Product {
  id: number,
  quantity: number,
}

let prod: Product = {} as any;
interface Products extends Array<Product>{}
let productItems : Products = [];
let productItems2 : Products = [];


let obj = {};
let container = [];

prod.id = 1;
prod.quantity = 10;
console.log("prod1: ", prod);
productItems.push(prod);

prod.id = 2;
prod.quantity = 100;
console.log("prod2: ", prod);
productItems.push(prod);

prod.id =3;
prod.quantity = 34;
console.log("prod3: ", prod);
productItems.push(prod);

obj = { "products1" : productItems}
container.push(obj);

prod.id = 10;
prod.quantity = 10;
console.log("prod2.1: ", prod);
productItems2.push(prod);

prod.id = 20;
prod.quantity = 100;
productItems2.push(prod);
console.log("prod2.2: ", prod);

prod.id =30;
prod.quantity = 34;
console.log("prod2.3: ", prod);
productItems2.push(prod);

obj = { "products2" : productItems2}
container.push(obj);

obj = { "products1" : productItems, "products2": productItems2}

console.log(JSON.stringify(obj));
如果我打印var容器,则将JSON对象显示到类似[]的数组中

我做错了什么

这是我的密码

问题在于,您重复变异同一对象,而不是为要添加到数组中的每个项目创建新对象

问题集中在变量和值之间的差异上。为了理解我的意思,让我们浏览一下代码的一部分。我们从

let prod = {};
它声明变量
prod
,并将某个内存位置(比如位置1)中初始为空的对象的值赋给它

然后我们点击:

prod.id = 1;
prod.quantity = 10;
这将修改对象
prod
引用的位置1处的对象,使其现在具有id 1和数量10。下一行,

productItems.push(prod);
将位置1处的对象推送到
productItems
上。到目前为止,上帝。但接下来,我们有:

prod.id = 2;
prod.quantity = 100;
productItems.push(prod);
这再次将位置1处的对象更改为具有
id
2和
quantity
100,然后再次将该对象推送到
productItems
上。因此,此时,位置1处的对象是
{id:2,quantity:100}
,并且
productItems
包含对它的两个引用

要解决这个问题,您需要避免重用同一个对象。如果需要,仍然可以使用相同的变量
prod
,但每次创建新的对象放入数组时,都需要它引用不同的对象。例如,如果你写:

let prod = {} as any;
prod.id = 1;
prod.quantity = 10;
console.log("prod1: ", prod);
productItems.push(prod);

prod = {} as any;
prod.id = 2;
prod.quantity = 100;
console.log("prod2: ", prod);
productItems.push(prod);

prod = {} as any;
prod.id =3;
prod.quantity = 34;
console.log("prod3: ", prod);
productItems.push(prod);

然后事情就如你所期望的那样进行了。

非常感谢你的帮助,这是一个我已经忘记的概念,在解释中有非常详细的内容。
let prod = {} as any;
prod.id = 1;
prod.quantity = 10;
console.log("prod1: ", prod);
productItems.push(prod);

prod = {} as any;
prod.id = 2;
prod.quantity = 100;
console.log("prod2: ", prod);
productItems.push(prod);

prod = {} as any;
prod.id =3;
prod.quantity = 34;
console.log("prod3: ", prod);
productItems.push(prod);