我有一个巨大的javascript对象返回到GET api调用,我想提供选项来限制返回的键的数量,如下所示:
GET /api/
{
"bla1" : {
....
},
"bla2" : {
....
},
"bla3" : {
....
},
"bla4" : {
....
},
"bla5" : {
....
},
"bla6" : {
....
},
"bla7" : {
....
}
}
将limit=2
添加到查询参数时,应返回以下内容:
GET /api?limit=2
{
"bla1" : {
....
},
"bla2" : {
....
}
}
我主要关心的是响应时间。如果我有100000个对象怎么办,我真的不想遍历它们。我该怎么办?
编辑: 好吧,它不一定要持久。有人说这是任意的。所以我想它可以从任何地方删除。
答案 0 :(得分:1)
如果没有遍历对象的至少一部分,实际上是无法实现目标的。但是,您可以仅通过遍历对象的一部分来限制循环:要么保留要保留的部分,要么废弃要丢弃的部分。
从任何对象中轻松获取N个元素,仅循环保留的键即可。
let c = 0;
let target = {};
for (var property in object) {
if (object.hasOwnProperty(property)) {
target[property] = object[property];
c++;
if (c > N) {
break;
}
}
}
您还可以采用相反的方法,并删除N个键,仅循环显示要删除的键:
let c = 0;
for (var property in object) {
if (object.hasOwnProperty(property)) {
delete object[property];
c++;
if (c > N) {
break;
}
}
}
答案 1 :(得分:0)
怎么样:
Object.entries(obj).slice(0, n).reduce(
(acc, [k, v]) => (acc[k] = v, acc)
);
从技术上讲,这也是一个循环,但是预先选择了n个元素。
请介意-前面的示例具有更高的内存效率。