【问题标题】:Get last element inside new array with key value from Object?使用对象的键值获取新数组中的最后一个元素?
【发布时间】:2020-05-01 01:03:17
【问题描述】:

我有一个对象,其中每个键都有一个由多个对象组成的数组。我只想从每个数组中获取最后一项。

我尝试只将最后一个元素推送到新数组中,但问题是现在它没有说明哪个对象属于哪个类。

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

有没有办法在每个对象中推送类名并得到类似的结果。

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

【问题讨论】:

    标签: javascript arrays object


    【解决方案1】:

    一种方法是使用Object.assign

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

    但是,更现代的方法,使用spread in object literals 语法使其(我认为)更易于阅读

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

    【讨论】:

    • 正如我要回答的那样。
    • @D.Pardal - 实际上我使用{class: key, ...value[value.length - 1]} 更改了它以获得更简洁的代码
    • 感谢@Phil - 添加解释后,我将使其更具可读性
    • 不用担心。我只是想强调有趣的部分。我们都知道数据是什么样子的?
    • 谢谢@JaromandaX。我已经摆弄了一个小时,终于决定在这里发帖。 :)
    【解决方案2】:
    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);
    

    【讨论】:

      【解决方案3】:

      你也可以这样做

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

      【讨论】:

        猜你喜欢
        • 2011-09-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-09-29
        • 1970-01-01
        • 2016-08-26
        • 2016-09-29
        • 1970-01-01
        相关资源
        最近更新 更多