请求数据时从对象解析属性

时间:2018-12-03 21:19:55

标签: javascript angular typescript

我正在从类似JSON文件的产品列表中获取

产品。服务

getProducts(): Observable<Product[]>{
    return this._http.get<Product[]>(this.configUrl); 
}

products.component

getProducts(): void{
    this.productsService.getProducts()
        .subscribe(productList =>{
         this.products = productList['products'];
        } );

}

product.interface

export interface Product {
    "quantity": number;
    "price": number;
    "available": boolean;
    "sublevel_id": number;
    "name": string;
    "id": string;
}

Json示例

0:
 available: false
 id: "58b5a5b1b6b6c7aacc25b3fb"
 name: "aute"
 price: "$8,958"
 quantity: 308
 sublevel_id: 3
1:
 available: true
 id: "58b5a5b117bf36cf8aed54ab"
 name: "mollit"
 price: "$5,450"
 quantity: 891
 sublevel_id: 3

Price属性以字符串形式存储在json中,但我想将其作为数字存储在变量this.products中,因为我将对其进行多次操作

最好的方法是什么?

2 个答案:

答案 0 :(得分:1)

根据您的最后评论,这是您可以一次存储所需值的方法:

替换:

this.products = productList['products'];

具有:

this.products = productList['products']
  .map(product => ({ ...product, price: Number(product.price.replace(/[^0-9.-]+/g,'')) }));

我使用this answer中给出的解决方案将货币值转换为浮点数,如注释中所述。

答案 1 :(得分:0)

以数字格式而不是字符串存储价格。

0:
 available: false
 id: "58b5a5b1b6b6c7aacc25b3fb"
 name: "aute"
 price: 8958
 quantity: 308
 sublevel_id: 3
1:
 available: true
 id: "58b5a5b117bf36cf8aed54ab"
 name: "mollit"
 price: 5450
 quantity: 891
 sublevel_id: 3