Implemente uma função mapper que aceita dados (source), campos (fields), filtro (filter) e ordenação (order). É necessário: validar os parâmetros (fields deve ser um array, source/filter/order são funções, os campos em fields devem estar presentes nos dados), obter os dados através da chamada source(), filtrar através de filter, ordenar através de order e retornar apenas os campos solicitados em fields.
sobes.tech IA
Resposta da IA
javascript function mapper({ source, fields, filter, order }) { // Validação de parâmetros if (!Array.isArray(fields)) { throw new TypeError('fields deve ser um array'); } if (typeof source !== 'function') { throw new TypeError('source deve ser uma função'); } if (typeof filter !== 'function') { throw new TypeError('filter deve ser uma função'); } if (typeof order !== 'function') { throw new TypeError('order deve ser uma função'); }
const data = source();
if (!Array.isArray(data)) { throw new TypeError('source deve devolver um array de objetos'); }
// Verificação de que todos os campos em fields existem nos dados
for (const field of fields) {
if (!data.every(item => field in item)) {
throw new Error(O campo '${field}' não existe nos dados);
}
}
// Filtragem const filtered = data.filter(filter);
// Ordenação const sorted = filtered.sort(order);
// Seleção apenas dos campos necessários return sorted.map(item => { const result = {}; for (const field of fields) { result[field] = item[field]; } return result; }); }
Exemplo de uso:
```javascript
const source = () => [
{ id: 1, name: 'Alice', age: 30 },
{ id: 2, name: 'Bob', age: 25 },
{ id: 3, name: 'Charlie', age: 35 }
];
const fields = ['id', 'name'];
const filter = item => item.age >= 30;
const order = (a, b) => a.name.localeCompare(b.name);
const result = mapper({ source, fields, filter, order });
console.log(result);
// [{ id: 1, name: 'Alice' }, { id: 3, name: 'Charlie' }]