Получить последний элемент внутри нового массива со значением ключа из объекта? - PullRequest
0 голосов
/ 01 мая 2020

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

Я пытался добавить sh только последний элемент в новый массив, но проблема в том, что теперь он не говорит, какой объект принадлежит какому классу.

let data = {
        "classA": [
            {
                date: '01-01',
                present: 49,
                absent: 14
            },
            {
                date: '02-01',
                present: 39,
                absent: 24
            },
            {
                date: '03-01',
                present: 35,
                absent: 28
            }
        ],
        "classB": [
            {
                date: '01-01',
                present: 49,
                absent: 14
            },
            {
                date: '02-01',
                present: 39,
                absent: 24
            },
            {
                date: '03-01',
                present: 35,
                absent: 28
            }
        ],
        "classC": [
            {
                date: '01-01',
                present: 49,
                absent: 14
            },
            {
                date: '02-01',
                present: 39,
                absent: 24
            },
            {
                date: '03-01',
                present: 35,
                absent: 28
            }
        ]
    }

    let newData = [];

    for (let [key, value] of Object.entries(data)) {
        newData.push(value[value.length - 1]);
    }

    console.log(newData);

Есть ли в любом случае pu sh имя класса внутри каждого объекта и получить результат примерно так:

[
  {
    "class": "ClassA",
    "date": "03-01",
    "present": 35,
    "absent": 28
  },
  {
    "class": "ClassB",
    "date": "03-01",
    "present": 35,
    "absent": 28
  },
  {
    "class": "ClassC",
    "date": "03-01",
    "present": 35,
    "absent": 28
  }
]

Ответы [ 3 ]

3 голосов
/ 01 мая 2020

Одним из способов является использование Object.assign

newData.push(Object.assign({class:key}, value[value.length -1]))

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

newData.push({class:key, ...value[value.length - 1]});

let data = {"classA":[{"date":"01-01","present":49,"absent":14},{"date":"02-01","present":39,"absent":24},{"date":"03-01","present":35,"absent":28}],"classB":[{"date":"01-01","present":49,"absent":14},{"date":"02-01","present":39,"absent":24},{"date":"03-01","present":35,"absent":28}],"classC":[{"date":"01-01","present":49,"absent":14},{"date":"02-01","present":39,"absent":24},{"date":"03-01","present":35,"absent":28}]}

    let newData = [];

    for (let [key, value] of Object.entries(data)) {
        newData.push({class:key, ...value[value.length - 1]});
    }

    console.log(newData);
1 голос
/ 01 мая 2020
let data = {
        "classA": [
            {
                date: '01-01',
                present: 49,
                absent: 14
            },
            {
                date: '02-01',
                present: 39,
                absent: 24
            },
            {
                date: '03-01',
                present: 35,
                absent: 28
            }
        ],
        "classB": [
            {
                date: '01-01',
                present: 49,
                absent: 14
            },
            {
                date: '02-01',
                present: 39,
                absent: 24
            },
            {
                date: '03-01',
                present: 35,
                absent: 28
            }
        ],
        "classC": [
            {
                date: '01-01',
                present: 49,
                absent: 14
            },
            {
                date: '02-01',
                present: 39,
                absent: 24
            },
            {
                date: '03-01',
                present: 35,
                absent: 28
            }
        ]
    }

    let newData = [];

    for (let [key, value] of Object.entries(data)) {
        newData.push(value[value.length - 1]);
newData[newData.length-1].class=key 
    }

    console.log(newData);
0 голосов
/ 01 мая 2020

Вы можете сделать это также

let result = Object.entries(data).map(data => {
    return { class: data[0], ...data[1][data[1].length - 1] };
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...