0

Context: I'm trying to develope a web application in angular that works with a rest-oriented server, I recieve json arrays from the server (product objects) and I would like to filter them by the type of the product which is in a field of the array. Sample of the json:

{
    "name": "Water",
    "price": 0.4,
    "type": "Drinks",
    "idprod": 1,
    "description": ""
}

Product model:

export class Producte{
  name: string;
  price: number;
  type: string;
  idprod: number;

  constructor(pName: string, pPrice: number, pType: string, pIdprod: number){
    this.name = pName;
    this.price = pPrice;
    this.type = pType;
    this.idprod = pIdprod;
  }

}

Posts service:

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';

@Injectable({
  providedIn: 'root'
})
export class PostsService {

  baseUrl: string;

  constructor(private http: HttpClient) {
    this.baseUrl = 'http://134.122.51.190:8080/Project_Bar/productes';
  }

  getAll(): Promise<any[]>{
    return this.http.get<any[]>(this.baseUrl).toPromise();
  }
}

Component that takes all the data and puts it in an array:

import { Component, OnInit } from '@angular/core';
import { Producte } from '../../models/producte.model';
import { PostsService } from '../../services/posts.service';
@Component({
  selector: 'app-caja',
  templateUrl: './caja.component.html',
  styleUrls: ['./caja.component.css']
})
export class CajaComponent implements OnInit {
  arrPosts: any[]

  constructor(private postsService: PostsService) {
    this.arrPosts = [];
  }

  ngOnInit(): void {
    this.postsService.getAll()
    .then(posts => this.arrPosts = posts)
    .catch(error => console.log(error));
  }

}

My question is how I can create different arrays for every type of product(I have only 5 types). Thanks.

1 Answer 1

2

You can create different arrays you need. and map your response.

drinks = []
someProductArr = []

ngOnInit(): void {
this.postsService.getAll()
.then(posts.map(item => {
  if(item.type === 'Drinks') {
   this.drinks.push(item)
  } else {//do or check what you need}
)
.catch(error => console.log(error));
}

But better filter your data with database request(something like group by). On client side it will take longer

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.