Estoy creando una simulación de API que consiste en consultar un archivo json (que contiene objetos de la compañía) para un nombre en particular, pero sigue devolviendo nulo en lugar de las coincidencias. ¿Cómo puedo arreglar esto? Basé el trabajo en este tutorial.

Código

  filterCompanies(searchTerm) {
    this.http.get('assets/data/companies.json').map(res => res).subscribe(data => {
      this.companies = data;
      return this.companies.filter((company) => {
        return company.name.toLowerCase().indexOf(searchTerm.toLowerCase()) > -1;
      });
    });
  }

Companies.json

[
  {
    "name": "one"
  },
  {
    "name": "two"
  },
  {
    "name": "three"
  },
  {
    "name": "four"
  },
  {
    "name": "five"
  }
]
0
methuselah 9 sep. 2018 a las 08:15

4 respuestas

La mejor respuesta

Sin usar return, puede asignar directamente los valores,

 this.companies = data.filter(t=>t.name.toLowerCase().indexOf(searchTerm.toLowerCase()) > -1;
2
Sajeetharan 9 sep. 2018 a las 05:24

El filtro no modifica la variable en la que trabaja, por lo que debe asignarlo nuevamente a la variable deseada

filterCompanies(searchTerm) {
    this.http.get('assets/data/companies.json').map(res => res).subscribe(data => {
      this.companies = data.filter((company) => {
        return company.name.toLowerCase().indexOf(searchTerm.toLowerCase()) > -1;
      });
    });
}
-1
Huy Đạt Đào 9 sep. 2018 a las 05:25

Puede usar incluye para verificar si el nombre contiene una cadena de búsqueda

this.companies = [];

this.companies = data.filter((company) => company.name.includes('searchtext'));

O

this.companies = data.filter((company) => company.name.toLowerCase().includes('searchtext'.toLowerCase()));
-1
Pratap A.K 9 sep. 2018 a las 05:25

Las compañías filtradas ahora están contenidas dentro de 'this.comapnies', si desea usar las compañías en el componente que tiene el miembro 'compañías', no necesita devolverlo desde su función filterCompanies

0
Teebo 9 sep. 2018 a las 06:11