Tengo una matriz de objetos cuyos objetos tienen una matriz, y mi problema es filtrar objetos según los valores de una matriz anidada.
const skus = [{ id: 1, features: ["Slim"], fields: [{ label: "Material", value: "Material1" }, ] }, { id: 2, features: ["Cotton"], fields: [{ label: "Material", value: "Material2" }, ] }, { id: 3, features: ["Slim"], fields: [{ label: "Material", value: "Material3" }, ] } ];la salida debe ser una matriz basada en una matriz de características, ejemplo:
const result = [{ id: 2, features: ["Cotton"], fields: [{ label: "Material", value: "Material2" }, { label: "Type", value: "Type2" } ] }]Traté de usar el método de filtro, pero solo funciona en objetos, pero no en matrices anidadas en objetos
El método Filter le permite profundizar en las propiedades de un objeto y realizar comparaciones.
const skus = [ { id: 1, features: ["Slim"], fields: [{ label: "Material", value: "Material1" },] }, { id: 2, features: ["Cotton"], fields: [{ label: "Material", value: "Material2" },] }, { id: 3, features: ["Slim"], fields: [{ label: "Material", value: "Material3" },] } ]; let featureName = "Cotton" let results = skus.filter(s => s.features.includes(featureName)) console.log(results);Sin embargo, no estoy seguro de dónde viene "{ label: "Type", value: "Type2" }" en tus resultados.
Bueno, para comprender mejor, debe comprender que Array también es un objeto especial solo en javascript, por lo que también puede realizar filtros en objetos o en objetos anidados.
skus.filter((item,keys)=>{ return item['features'].includes("Cotton") // Pass the search term in includes })Con esto puedes lograr tu objetivo. Hazme saber si esto funciona para ti.
Obtuve el mismo resultado del ejemplo que diste usando:
skus.filter(sku => sku.features.includes("Cotton"));Espero que puedas explicar un poco más.