Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有一种简单快捷的方法可以从javascript对象中删除x个键,而不必在键上循环?_Javascript_Node.js - Fatal编程技术网

有没有一种简单快捷的方法可以从javascript对象中删除x个键,而不必在键上循环?

有没有一种简单快捷的方法可以从javascript对象中删除x个键,而不必在键上循环?,javascript,node.js,Javascript,Node.js,我有一个巨大的javascript对象返回给GET api调用,我想提供一个选项来限制返回的键的数量,如下所示: GET /api/ { "bla1" : { .... }, "bla2" : { .... }, "bla3" : { .... }, "bla4" : { .... }, "bla5" : { .... }, "bla6" : { .... },

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

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

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

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

编辑
好吧,它不一定是最后一个。有人说这是武断的。所以我想它可以从任何地方移走

如果不循环至少一部分对象,就无法实现目标。但是,您可以通过仅在对象的一部分上循环来限制循环:您想要保留的部分,或者您想要丢弃的部分

从任何对象中提取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;
    }
  }
}
那么:

 Object.entries(obj).slice(0, n).reduce(
     (acc, [k, v]) => (acc[k] = v, acc)
 );
从技术上讲,这在下面也是一个循环,但在前面选择了n个元素


请注意-上一个示例的内存效率更高。

如何定义“last”?对象键无序。不保证对象属性顺序-so@DuaaZahi如果你不关心顺序,它怎么可能是“最后的”呢?@Flimzy它不是武断的,有一套规则:但我同意你,只是想传播信息。我自己直到最近才意识到这个问题。这个对象首先是在哪里创建的?这就是你应该实现这个过滤器的地方。