过滤对象的对象并使用JavaScript

时间:2017-07-03 09:36:52

标签: javascript arrays

如何在JavaScript中过滤/循环对象对象以创建仅包含最后7个对象的新数组?我知道有类似的帖子,但我发现的任何内容都没有真正说明我的具体要求。

我假设有人可能想使用.length并将项目推送到数组中,但我不确定如何。

此外,如果返回的JSON尚未排序,则必须根据日期对数组进行排序。

这是JSON中对象对象的示例:

"uptime": {
    "2017-05-03": {
      "failures": 816, 
      "successes": 18378
    }, 
    "2017-05-04": {
      "failures": 1067, 
      "successes": 22302
    }, 
    "2017-05-05": {
      "failures": 1008, 
      "successes": 82599
    }, 
    "2017-05-07": {
      "failures": 2724, 
      "successes": 142854
    }, 
    "2017-05-08": {
      "failures": 1329, 
      "successes": 149028
    }, 
    "2017-05-09": {
      "failures": 3072, 
      "successes": 155432
    }, 
    "2017-05-10": {
      "failures": 22260, 
      "successes": 313944
    }, 
    "2017-05-11": {
      "failures": 8056, 
      "successes": 591864
    }, 
    "2017-05-15": {
      "failures": 1722, 
      "successes": 111285
    }, 
    "2017-05-16": {
      "failures": 8832, 
      "successes": 251142
    }, 
    "2017-05-17": {
      "failures": 2620, 
      "successes": 170140
    }
}

1 个答案:

答案 0 :(得分:2)

您可以简单地获取对象(对象)的值,并从中分割出最后七个:

var arr = Object.values( input.uptime ).slice(-7);

但是,对象键顺序没有以任何方式定义,因此您可能希望对数组进行排序:

var arr=[];
for(key in input.uptime){
  input.uptime[key].time=key;
  arr.push(input.uptime[key]);
}

所以现在我们的数组包含带有time属性的对象,可以对其进行排序:

arr.sort((a,b)=>(new Date(a.time))-(new Date(b.time)));

然后切出:

arr=arr.slice(-7);