Կիրառեք mapper ֆունկցիան, որը ընդունում է տվյալներ (source), դաշտեր (fields), ֆիլտր (filter) և դասավորություն (order): Պետք է՝ վավերացնել պարամետրերը (fields-ը պետք է լինի զանգված, source/filter/order-ը՝ ֆունկցիաներ, fields-ի մեջ գտնվող դաշտերը պետք է ներկայանան տվյալներում), ստանալ տվյալները source() կանչով, ֆիլտրել filter-ով, դասավորել order-ով և վերադարձնել միայն fields-ից պահանջվող դաշտերը։
sobes.tech AI
Պատասխան 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; }); }
// Օգտագործման օրինակ: 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' }]