Как сохранить данные в массиве, если их больше 1? - PullRequest
0 голосов
/ 03 ноября 2019

У меня есть этот скрипт:

    let data = [
        {day: 1, time: '08:00', note: 'madrid'},
        {day: 2, time: '08:00', note: 'barcelona'},
        {day: 3, time: '10:00', note: 'juventus'},
    ]
    let days = [7, 1, 2, 3, 4, 5, 6]
    let list = []

    days.forEach(element => {
        let item = data.find(x => x.day === element)

        if (item) {
            list.push(item)
        } else {
            list.push({ day: element, time: undefined })
        }
    });

Если скрипт выполняется, он работает. Он будет отображать расписание с 1 по 7 день. Однако моя проблема в том, что переменная данных является динамической. Таким образом, один день может иметь более одного расписания, как здесь:

    let data = [
      {day: 1, time: '08:00', note: 'madrid'}, {day: 1, time: '09:00', note: 'chelsea'},
      {day: 2, time: '08:00', note: 'barcelona'}, {day: 2, time: '09:00', note: 'mu'},
      {day: 3, time: '10:00', note: 'juventus'}
    ]

Может быть, я должен создать внутренний массив в день (день в качестве ключа), чтобы я мог сохранять дни данных, которые имеют более одного расписания,

Как мне это сделать?

Ответы [ 2 ]

0 голосов
/ 03 ноября 2019

Хорошо, допустим, у вас есть это:

let days = [7, 1, 2, 3, 4, 5, 6]

let data = [
    {day: 1, time: '08:00', note: 'madrid'},
    {day: 1, time: '09:00', note: 'chelsea'},
    {day: 2, time: '08:00', note: 'barcelona'},
    {day: 2, time: '09:00', note: 'mu'},
    {day: 3, time: '10:00', note: 'juventus'}
]

Сначала я бы отфильтровал массив data, чтобы получить все объекты с вашим ключом, а затем я бы поместил все эти элементы в listпеременная результата. Одним из подходов для этого может быть:


days.forEach( d => {
    let daySchedule = data.filter(elem => {
        elem.day === d;
    });

    if (daySchedule.length > 0) {
        daySchedule.forEach( elem => list.push(elem) );
    }
    else {
        list.push({ day: d, time: undefined })
    }
});

0 голосов
/ 03 ноября 2019

Сможете ли вы сделать что-то подобное?

let data = [
    {day: 1, time: '08:00', note: 'madrid'}, {day: 1, time: '09:00', note: 'chelsea'},
    {day: 2, time: '08:00', note: 'barcelona'}, {day: 2, time: '09:00', note: 'mu'},
    {day: 3, time: '10:00', note: 'juventus'}
]
let days = [7, 1, 2, 3, 4, 5, 6];
let list = [];

days.forEach(day => {
    list.push({day, schedule: [...data.filter(d => d.day === day)]
        .map(d => ({time: d.time, note: d.note}))
    })
});

console.log(list);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...