Implementieren Sie eine Funktion mapper, die Daten (source), Felder (fields), Filter (filter) und Sortierung (order) akzeptiert. Es ist notwendig: die Parameter zu validieren (fields muss ein Array sein, source/filter/order sind Funktionen, die Felder in fields müssen in den Daten vorhanden sein), die Daten durch den Aufruf von source() zu erhalten, durch filter zu filtern, durch order zu sortieren und nur die angeforderten Felder aus fields zurückzugeben.
sobes.tech KI
Antwort von 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' }]