Tengo una matriz json donde contiene objetos que tienen campos de nombre y calificación. Quiero filtrar esa matriz donde la calificación es 5. Puede ser fácil de encontrar, pero me quedé atascado. A continuación se muestra mi objeto json.
let products = [ { "name" : "product 1", "rating" : 5 }, { "name" : "product 2", "rating" : 4 }, { "name" : "product 3", "rating" : 5 }, { "name" : "product 4", "rating" : 2 }]Aquí estoy usando la funcionalidad de filtro pero no puedo obtener ¿Cómo puedo usarlo correctamente?
Esta es la función que he escrito pero no funciona.
const prod = (products) => { products.filter((proct) => { if(proct === 5){ console.log(proct.name); } }); } prod(products);Alguien hágame saber lo que estoy haciendo mal.
la función de filter debe devolver un valor booleano como resultado
La función es un predicado, para probar cada elemento de la matriz. Devuelve un valor que fuerza a verdadero para mantener el elemento, o a falso en caso contrario.
let products = [{ "name": "product 1", "rating": 5 }, { "name": "product 2", "rating": 4 }, { "name": "product 3", "rating": 5 }, { "name": "product 4", "rating": 2 } ] products = products.filter(({rating}) => rating === 5) console.log(products)Cada elemento de su matriz es un objeto, y supongo que está buscando rating===5 .
Su función debe ser:
let products = [{ "name": "product 1", "rating": 5 }, { "name": "product 2", "rating": 4 }, { "name": "product 3", "rating": 5 }, { "name": "product 4", "rating": 2 } ] const prod = (products) => { products.filter((proct) => { if (proct.rating === 5) { console.log(proct.name); return true; } return false }); } prod(products) Obtener solo la clave de name :
Eche un vistazo a la función de mapa que crea una nueva matriz a partir de una matriz anterior:
.map(({name}) => name)Código completo:
let products = [{ "name": "product 1", "rating": 5 }, { "name": "product 2", "rating": 4 }, { "name": "product 3", "rating": 5 }, { "name": "product 4", "rating": 2 } ] products = products.filter(({rating}) => rating === 5).map(({name}) => name) console.log(products)Su código no está comprobando la propiedad. sino el objeto mismo. Usa el . operador para verificar la propiedad específica:
let products = [ { "name" : "product 1", "rating" : 5 }, { "name" : "product 2", "rating" : 4 }, { "name" : "product 3", "rating" : 5 }, { "name" : "product 4", "rating" : 2 }] const prod = (products) => { products.filter((proct) => { if(proct.rating === 5){ console.log(proct.name); } }); } prod(products);Su condición es comparar proct , un objeto, con el valor 5 . Probablemente olvidó acceder a la propiedad de rating de proct :
products.filter((proct) => { if(proct.rating === 5){ console.log(proct.name); } }); Sin embargo, está utilizando el filter de forma incorrecta. Filter es un método cuyo objetivo principal es obtener todos los elementos de la matriz que responden a una condición y devolverlos, y no solo iterar sobre una matriz y ejecutar código (para eso forEach ). Un código más correcto sería:
const filteredProducts = products.filter((proct) => proct.rating === 5); console.log(filteredProducts); // [{ name: "product 1", rating: 5 }, { name: "product 3", rating: 5 }] filteredProducts.forEach((proct) => console.log(proct.name));Esta solución primero recupera todos los productos cuya calificación es 5 y luego itera sobre cada uno de ellos para imprimir su nombre.