Tratando de hacer una función que use un filtro pero no un bucle for o while o una función foreach, que recorrerá una matriz de objetos solo para devolver sus valores de propiedad. Por ejemplo,
function getShortMessages(messages) { return messages.filter(function(obj){ return obj.message }); }entonces si llamo
getShortMessages([{message:"bleh"},{message:"blah"}]);Debería obtener una devolución de una matriz = ["bleh","blah"] Simplemente no estoy seguro de cómo implementar el filtro según estas pautas. También estaba pensando en usar una función de cadena, tal vez .map.
//// Aquí está la especificación completa del desafío del código/////
Básico: Filtro Ejercicio 4 de 18
Use Array#filter para escribir una función llamada getShortMessages.
getShortMessages toma una matriz de objetos con propiedades '.message' y devuelve una matriz de mensajes que tienen menos de < 50 caracteres.
La función debe devolver una matriz que contenga los mensajes en sí, sin su objeto contenedor.
{ message: 'Esse id amet quis eu esse aute officia ipsum.' // random } [ 'Tempor quis esse consequat sunt ea eiusmod.', 'Id culpa ad proident ad nulla laborum incididunt.', 'Ullamco in ea et ad anim anim ullamco est.', 'Est ut irure irure nisi.' ] function getShortMessages(messages) { // SOLUTION GOES HERE } module.exports = getShortMessages» Para volver a imprimir estas instrucciones, ejecute: funcional-javascript print » Para ejecutar su programa en un entorno de prueba, ejecute: funcional-javascript ejecutar programa.js » Para verificar su programa, ejecute: funcional-javascript verificar programa.js » Para obtener ayuda ejecutar: ayuda funcional-javascript
Use .filter cuando desee obtener los objetos completos que coincidan con la propiedad o propiedades esperadas. Use .map cuando tenga una variedad de cosas y quiera hacer alguna operación en esas cosas y obtener el resultado.
El desafío es obtener todos los mensajes que tienen 50 caracteres o menos. Por lo tanto, puede usar el filter para obtener solo los mensajes que pasan esa prueba y luego map para obtener solo el texto del mensaje.
function getShortMessages(messages) { return messages .filter(function(obj) { return obj.message.length <= 50; }) .map(function(obj) { return obj.message; }); }JSFiddle: http://jsfiddle.net/rbbk65sq/
Si es posible que los objetos de entrada no tengan una propiedad de message , querrá probarlo con obj.message && obj.message.length <= 50 así:
function getShortMessages(messages) { return messages .filter(function(obj) { return obj.message && obj.message.length <= 50; }) .map(function(obj) { return obj.message; }); }Las mismas muestras de código en ES6:
const getShortMessages = (messages) => messages .filter(obj => obj.message.length <= 50) .map(obj => obj.message); Y si los objetos de entrada pueden no tener la propiedad del message :
const getShortMessages = (messages) => messages .filter(obj => obj.message && obj.message.length <= 50) .map(obj => obj.message);JSFiddle: http://jsfiddle.net/npfsrwjq/
Aunque me doy cuenta de que este hilo es muy antiguo, sentí que era necesario comentar en caso de que alguien se tropiece con él nuevamente. Lo haría como arriba simplemente usando la sintaxis es6 como esta:
objects.filter(obj => obj.key === 'value').map(filteredObj => filteredObj.key);Así que el ejemplo anterior sería:
getShortMessages = (messages) => messages.filter(obj => obj.message.length <= 50).map(obj => obj.message);Con valor de retorno personalizado (Ejemplo ES6 simple);
const customReturnFiltere = (result) => { return products.filter((obj) => { return obj.stock !== 0; }) .map((finalResult) => { return { ...finalResult, info: 'product will be filtered if stock is 0' } }); }