Распространение синтаксиса для вложенного объекта JavaScript с динамическими свойствами для группировки - PullRequest
0 голосов
/ 08 февраля 2019
const data = [{year:2019,month:1,id:"xd1"},
 {year:2019,month:1,id:"xd2"},
 {year:2019,month:1,id:"xd4"},
 {year:2019,month:2,id:"xd1"},
 {year:2018,month:1,id:"rd3"},
 {year:2018,month:2,id:"rd6"},
 {year:2018,month:2,id:"rd7"}
]

const result = data.reduce((state,d)=>{
    return {
        ...state,
        [d.year]:{
            ...state[d.year],
            [d.month]:[
                ...state[d.year][d.month]
                ,d.id]
        }
    }
},{})

console.log(result);



const result = data.reduce((state,d)=>{
    return {
        ...state,
        [d.year]:{
            ...state[d.year],
            [d.month]:[].concat([state[d.year][d.month]],[d.id])
        }
    }
},{})

оба возвращают ошибку TypeError: Cannot read property '1' of undefined Как я могу использовать синтаксис спреда для получения сгруппированного результата, как этот.

{'2019':{
   '1':["xd1","xd2","xd3"],
   '2':["xd1"]},
 '2018':{
   '1':["rd3"],
   '2':["rd6","rd7"]
 }

} 

Пожалуйста, рассмотрите возможность использования синтаксиса сокращения и спреда, а не цепочки других методов, потому чтоего фактически часть большей конструкции и другие вещи не помогут.Спасибо.РЕДАКТИРОВАТЬ: как указано в комментариях.Я хотел бы явно решить это встроенным оператором распространения, который возвращает новые объекты или массивы.Никаких дополнительных библиотек, таких как lodash.

1 Ответ

0 голосов
/ 08 февраля 2019

Просто добавьте немного sh*t and sticks:

const data = [{year:2019,month:1,id:"xd1"},
 {year:2019,month:1,id:"xd2"},
 {year:2019,month:1,id:"xd4"},
 {year:2019,month:2,id:"xd1"},
 {year:2018,month:1,id:"rd3"},
 {year:2018,month:2,id:"rd6"},
 {year:2018,month:2,id:"rd7"}
]

const result = data.reduce((state, d) => {
    return {
        ...state,
        [d.year]: {
            ...state[d.year],
            [d.month]: [
                ...((state[d.year]||{})[d.month]||[]),
                d.id]
        }
    }
},{})

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