Работа с функциями. как передать коллекцию в функции? [закрыт]

169
31 августа 2018, 04:40

Как реализовать данный код? Как сделать такие функции? (данный код менять нельзя)

  • friends - массив, состоящий из объектов
  • select, filterIn - функции, результатом которых является работа над коллекцией friends

Вот как friends занести в функции select и filterIn

var bestFriends = lib.query(
  friends,
  lib.select('name', 'gender', 'email'),
  lib.filterIn('favoriteFruit', ['Яблоко', 'Картофель'])
);
Answer 1

select, filterIn - функции, результатом которых является работа над коллекцией friends

Не совсем так. Функции .select() и .filterIn() - это функции, результатом которых будут функции, которые будут работать над коллекцией friends

Функция .query() получает на вход

  • коллекцию friends,
  • функцию выбора полей из коллекции friends, полученную в результате выполнения lib.select('name', 'gender', 'email')
  • функцию фильтрации элементов из коллекции friends, полученную в результате выполнения lib.filterIn('favoriteFruit', ['Яблоко', 'Картофель'])

Примерный код

var lib = { 
  query: function (data, select, filter) { 
    return select(filter(data)) 
  }, 
  select: function (...fields) { 
    return function (data) { 
      return data.map(function (x) { 
        var item = {} 
        fields.forEach(function (field) { 
          item[field] = x[field] 
        }) 
        return item 
      }) 
    } 
  }, 
  filterIn: function (field, values) { 
    return function (data) { 
      return data.filter(function (x) { 
        return values.indexOf(x[field]) > -1 
      }) 
    } 
  } 
} 
 
var friends = [ 
  { 
    name: 'Михаил', 
    gender: 'муж', 
    email: 'mikhail@example.com', 
    favoriteFruit: 'Тыква' 
  }, 
  { 
    name: 'Алексей', 
    gender: 'муж', 
    email: 'aleksey@example.com', 
    favoriteFruit: 'Дыня' 
  }, 
  { 
    name: 'Федор', 
    gender: 'муж', 
    email: 'fedor@example.com', 
    favoriteFruit: 'Яблоко' 
  }, 
  { 
    name: 'Иван', 
    gender: 'муж', 
    email: 'ivan@example.com', 
    favoriteFruit: 'Мандарин' 
  }, 
  { 
    name: 'Петр', 
    gender: 'муж', 
    email: 'petr@example.com', 
    favoriteFruit: 'Картофель' 
  } 
] 
 
var bestFriends = lib.query( 
  friends, 
  lib.select('name', 'gender', 'email'), 
  lib.filterIn('favoriteFruit', ['Яблоко', 'Картофель']) 
); 
 
console.log(bestFriends)

READ ALSO
JS Регулярное выражение - проверка URL

JS Регулярное выражение - проверка URL

Задача следующая - нужно составить регулярное выражение, которое проверит URL, и если оно имеет формат https://vkcom/[0-9A-z

162
[Vue warn]: Проблема с рекурсивным компонентом

[Vue warn]: Проблема с рекурсивным компонентом

[Vue warn]: Unknown custom element: <MyTreeList> - did you register the component correctly? For recursive components, make sure to provide the "name" option

175
Удаление EventListener после его вызова

Удаление EventListener после его вызова

Создать сообщение - работаетУдалить сообщение - не работает

171