简体   繁体   中英

Get last element inside new array with key value from Object?

I have an object where each key have an array of multiple objects. I want to get only the last item from each array.

I tried to push only last element inside a new array but the problem is that now it doesn't say which object belong to which class.

 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);

Is there anyway to push class name inside each object and get result something like this.

[
  {
    "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
  }
]

One way is to use Object.assign

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

But, more a modern method, using spread in object literals syntax makes it (I think) easier to read

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);

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);

You can do like this also

let result = Object.entries(data).map(data => {
    return { class: data[0], ...data[1][data[1].length - 1] };
    });

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM