有没有一种简便快捷的方法可以在不循环键的情况下从javascript对象删除x键?

时间:2019-04-03 08:23:30

标签: javascript node.js

我有一个巨大的javascript对象返回到GET api调用,我想提供选项来限制返回的键的数量,如下所示:

GET /api/
{
   "bla1" : {
     ....
   },
   "bla2" : {
     ....
   },
   "bla3" : {
     ....
   },
   "bla4" : {
     ....
   },
   "bla5" : {
     ....
   },
   "bla6" : {
     ....
   },
   "bla7" : {
     ....
   }
}

limit=2添加到查询参数时,应返回以下内容:

GET /api?limit=2
{
   "bla1" : {
     ....
   },
   "bla2" : {
     ....
   }
}
我主要关心的是响应时间。如果我有100000个对象怎么办,我真的不想遍历它们。我该怎么办?

编辑: 好吧,它不一定要持久。有人说这是任意的。所以我想它可以从任何地方删除。

2 个答案:

答案 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个元素。

请介意-前面的示例具有更高的内存效率。