Данный вопрос уже был задан и имеет решение:
Как передать функцию с аргументами в качестве аргумента (см. переменную result), причем так, чтобы сначала вызвалась функция query, затем функция filterIn, а затем select и в итоге результат вернулся в виде массива объектов (коллекции)?
Ведь если сейчас просто запустить, то вызовется сначала select, потом filterIn и уже потом query
var lib = {
query: query,
select: select,
filterIn: filterIn
};
function query(collection) {
//Сюда получаем
}
function select() {
//Код для выборки только нужных ключей коллекции
}
function filterIn(property, values) {
//Код для фильтрации коллекции
}
var people = [
{
name: 'Андрей',
gender: 'Мужской',
email: 'andrey@site.ru',
},
{
name: 'Николай',
gender: 'Мужской',
email: 'halo@site.ru',
}
]
var result = lib.query(
people,
lib.select('name', 'gender'),
lib.filterIn('name', ['Андрей', 'Николай'])
);
Причем реализацию переменной result и коллекции редактировать нельзя, все остальное можно.
Речь не о запуске функци (его изменить невозможно), а о порядке применения операций к массиву. Функции select
и filterIn
должны возвращать другие функции, которые и будут в нужном порядке вызываться в query
:
var lib = {
query: query,
select: select,
filterIn: filterIn
};
function query(arr, ...fs) {
console.log('query');
for (var q=fs.length; q--; ) {
arr = fs[q](arr)
}
return arr;
}
function select(...fields) {
return function (arr) {
console.log('select');
return arr.map(x => {
var res = {};
for (var f of fields) res[f] = x[f];
return res;
});
}
}
function filterIn(property, values) {
return function (arr) {
console.log('filterIn');
return arr.filter(x => ~values.indexOf(x[property]));
}
}
var people = [
{
name: 'Андрей',
gender: 'Мужской',
email: 'andrey@site.ru',
},
{
name: 'Николай',
gender: 'Мужской',
email: 'halo@site.ru',
}
]
var result = lib.query(
people,
lib.select('name', 'gender'),
lib.filterIn('name', ['Андрей', 'Николай'])
);
console.log(result);
.as-console-wrapper.as-console-wrapper { max-height: 100vh }
Возвращаемые данные из одной функции надо передавать в другую, и так по цепочке.
select(filter(query(queryArgs), filterArgs), selectArgs);
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Нужно добиться того, чтобы данные на странице обновлялись без перезагрузки страницыПервоначально данные поступают от сервера и отображаются...
Добрый деньЗадача следующая: - Есть источник данных в гугл таблице с содержанием городов и информации по ним (города в колонке B:B, формула...