Izpildiet mapper funkciju, kas pieņem datus (source), laukus (fields), filtru (filter) un kārtošanu (order). Nepieciešams: validēt parametrus (fields jābūt masīvam, source/filter/order ir funkcijas, lauki no fields jābūt klātesošiem datos), iegūt datus, izsaucot source(), filtrēt ar filter, kārtot ar order un atgriezt tikai pieprasītos laukus no fields.
sobes.tech AI
Atbilde no AI
javascript function mapper({ source, fields, filter, order }) { // Валидация параметров if (!Array.isArray(fields)) { throw new TypeError('fields должен быть массивом'); } if (typeof source !== 'function') { throw new TypeError('source должен быть функцией'); } if (typeof filter !== 'function') { throw new TypeError('filter должен быть функцией'); } if (typeof order !== 'function') { throw new TypeError('order должен быть функцией'); }
const data = source();
if (!Array.isArray(data)) { throw new TypeError('source должен возвращать массив объектов'); }
// Проверка, что все поля из fields есть в данных
for (const field of fields) {
if (!data.every(item => field in item)) {
throw new Error(Поле '${field}' отсутствует в данных);
}
}
// Фильтрация const filtered = data.filter(filter);
// Сортировка const sorted = filtered.sort(order);
// Выбор только нужных полей return sorted.map(item => { const result = {}; for (const field of fields) { result[field] = item[field]; } return result; }); }
Пример использования:
```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' }]