如何在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
}
}
答案 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);