0
votes

JavaScript: Comment filtrer l'objet dans la matrice

J'ai un tableau consistant en un objet qui a un champ de catégorieName (String) et un tableau (plantes).

J'aimerais filtrer à l'aide d'un nom de plante, quelle est la meilleure approche?

J'ai essayé avec mais cela ne renvoie que les plantes, ignore la catégorieNameName xxx

structure xxx


2 commentaires

Essayez d'utiliser: développeur.mozilla.org/en -Us / Docs / Web / JavaScript / Référence / ...


Êtes-vous sûr que c'est une structure correcte, je suppose que c'est console résultat?


4 Réponses :


0
votes

Utiliser filtre () sur la matrice extérieure et certains () sur les plantes interne tableau.

Ce ne sera pas filtré La ou les plantes spécifiques du tableau des plantes mais gardent l'ensemble de la matrice intacte. Il n'est pas clair que vous devez filtrer le sous-réseau ou non xxx


0 commentaires

0
votes

Essayez:

this.itemList.map(function(a) {
    return {
        categoryName: a.categoryName,
        plants: a.plants.filter(p => p.name.toLowerCase().includes(this.searchTerm.toLowerCase()))
}}).filter(a => a.plants.length > 0)


0 commentaires

0
votes

S'il vous plaît essayez cet exemple

p>

const searchTerm = "Alston";
const itemList = [
  {
    categoryName: "Heating",
    plants: [
      {
        plantId: 35,
        name: "Alston Oven",
        description: "Oven",
        plantCategoryId: 2,
        whenCreated: "1519357215942",
      },
      {
        plantId: 19,
        name: "Gregs Oven",
        description: null,
        plantCategoryId: 2,
        whenCreated: "1516830724579",
      },
    ],
  },
  {
    categoryName: "Refrigeration",
    plants: [
      { plantId: 13, name: "Fridge 1 ", description: "Walk in fridge" },
      {
        plantId: 5,
        name: "Fridge 2 Updated",
        description: "Description of Fridge 2",
      },
      { plantId: 4, name: "Fridge" },
    ],
  },
];

const output = itemList.filter((item) => {
  return item.plants
    .map((entry) => entry.name.toLowerCase())
    .join()
    .includes(searchTerm.toLowerCase());
});

console.dir(output, { depth: null, color: true });


0 commentaires

0
votes

Si vous voulez simplement filtrer les tableaux code> usines code>, vous n'avez pas besoin d'utiliser mapper code>. Utilisez foreach () code>, puis réaffectez la propriété code> plantes code> avec le tableau filtré là-bas.

this.itemList.forEach(item => 
    item.plants = item.plants.filter(p => 
        p.name.toLowerCase().includes(this.searchTerm.toLowerCase())));


0 commentaires