Aquí estoy definiendo una función usando el método .find(), y debería devolver { nombre: 'Adidas', precio: 95 }. ¿Alguien sabe por qué devuelve 'indefinido' en su lugar?
var shoes = [ { name: 'Nike', price: 200 }, { name: 'Red Wings', price: 250 }, { name: 'Vans', price: 150 }, { name: 'Converse', price: 160 }, { name: 'Reebok', price: 130 }, { name: 'New Balance', price: 175 }, { name: 'Adidas', price: 95 }, { name: 'Keds', price: 140 }, { name: 'Crocs', price: 135 } ]; const findWhere = function (array, criteria) { const key = Object.keys(criteria)[0]; criteria = criteria[key]; const result = array.find(ele => ele.key === criteria); return result; }; const myShoe = findWhere(shoes, {price: 95}); console.log(myShoe);Has usado ele.key que accede a la propiedad de key literal en ele .
Y dado que no hay una propiedad key en ninguno de estos objetos:
{ name: 'Crocs', price: 135 } ele.key siempre está undefined , lo que significa que no obtiene coincidencias.
Use corchetes como lo hizo antes ( criteria = criteria[key]; ):
const result = array.find(ele => ele[key] === criteria); // ^ ^Reemplace ele.key a ele[key]
const result = array.find(ele => ele[key] === criteria);