Javascript - создание нового объекта после поиска по другому массиву объектов - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть массив дат следующим образом ...

dateArray : 2018-12-15,2018-11-20,2018-12-20

И у меня есть массив объектов следующим образом ...

{ _id: 5bf454d9c4a8bc6e246afd05,
 date: '2018-12-15',
 time: '9:00 - 10:00',
 status: 'available',
 price: 35 },
{ _id: 5bf455adf678f76f7ffb9144,
 date: '2018-11-20',
 time: '15:00 - 16:00',
 status: 'available',
 price: 55 },
{ _id: 5bf455caf678f76f7ffb914b,
 date: '2018-11-20',
 time: '12:00 - 13:00',
 status: 'available',
 price: 45 },
{ _id: 5bfec692d25d720f29eb49e1,
  date: '2018-12-20',
  time: '9:00 - 10:00',
  status: 'available',
  price: 33 }

Что я пытаюсьсделать, это взять каждое значение даты в dateArray, найти эту дату в массиве объектов и вернуть новый объект со структурой примерно так ...

{
"date": "2018-12-15",
"timePrice": [
    {
        "time": "9:00 - 10:00",
        "price": 35
    }
    ],
}{
"date": "2018-11-20",
"timePrice": [
    {
        "time": "12:00 - 13:00",
        "price": 45
    },
    {
        "time": "15:00 - 16:00",
        "price": 55
    },

   ]
}

По сути, я хотел бы сгруппировать поодна уникальная дата, а затем вложенные объекты внутри каждой даты, которые содержат время для этой даты.Любые идеи, как я мог пойти об этом?

1 Ответ

0 голосов
/ 28 ноября 2018

Вы можете reduce() над датами, а затем для каждой даты, filter() элементов, которые вы хотите построить новый объект:

const dateArray =  ['2018-12-15', '2018-11-20', '2018-12-20']
const prices = [{ _id: '5bf454d9c4a8bc6e246afd05',date: '2018-12-15',time: '9:00 - 10:00',status: 'available',price: 35 },{ _id: '5bf455adf678f76f7ffb9144',date: '2018-11-20',time: '15:00 - 16:00',status: 'available',price: 55 },{ _id: '5bf455caf678f76f7ffb914b',date: '2018-11-20',time: '12:00 - 13:00',status: 'available',price: 45 },{ _id: '5bfec692d25d720f29eb49e1',date: '2018-12-20',time: '9:00 - 10:00',status: 'available',price: 33 }]

let obj = dateArray.reduce((obj, date) => {
    if (!obj[date]) obj[date] = {date, timePrice:[]}

    // get prices for specific date
    let pr = prices.filter(item => item.date === date)

    // for each price push just the time and price values as a new object
    obj[date].timePrice.push(pr.map(({time, price}) => ({time, price})))
    return obj
}, {} )

// Object.values(obj) will be your array
console.log(Object.values(obj))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...