Используя итеративный подход, поскольку hotelsIn
должна быть функцией, вы хотите, чтобы isLocated
возвращала функцию, которая принимает местоположение:
const hotelList = [
{city: "London", hotel: 1},
{city: "Prague", hotel: 1},
{city: "London", hotel: 2},
{city: "Prague", hotel: 2},
]
const isLocated = location => hotel => location === hotel.city
const hotelsIn = location => hotelList.filter(isLocated(location));
// −−−−−−−−−−−−−−^^^^^^^^^^^^
console.log(hotelsIn('London'))
Затем мы можем обобщить это, выделив имя свойства (city
):
const hotelList = [
{city: "London", hotel: 1},
{city: "Prague", hotel: 1},
{city: "London", hotel: 2},
{city: "Prague", hotel: 2},
]
const isLocated = (name, value) => item => value === item[name]
// −−−−−−−−−−−−−−−^^^^^ ^ ^^^^ ^^^^^ ^^^^^^^^^^
const hotelsIn = (name, location) => hotelList.filter(isLocated(name, location))
// −−−−−−−−−−−−−−^^^^^^^^^^^^^^^^^^^
console.log(hotelsIn('city', 'London'))
// −−−−−−−−−−−−−−−−−−^^^^^^^
Если хотите, вы можете добавить функцию hotelsInCity
:
const hotelList = [
{city: "London", hotel: 1},
{city: "Prague", hotel: 1},
{city: "London", hotel: 2},
{city: "Prague", hotel: 2},
]
const isLocated = (name, value) => item => value === item[name]
const hotelsIn = (name, location) => hotelList.filter(isLocated(name, location))
const hotelsInCity = city => hotelsIn('city', city)
console.log(hotelsInCity('London'))