Typescript使用接口创建JSON对象
我需要在JSON字段中为PostgreSQL中的存储构建一个自定义JSON对象,并使用typescript来完成此操作 在我的测试案例中,我有以下代码: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
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);