繁体   English   中英

删除属性或仅创建具有所需属性的新对象是否更快?

[英]Is it faster to delete properties or construct a new object with only desired properties?

在NodeJS中,我有一个循环被执行了数百万次,这除其他外还从某些对象中剥离了一些不需要的属性。

我很想知道总体而言,这样做是否更快:

undesiredPropsArray.forEach(p => delete(obj[p]))

要么

var newObj = {};
Object.keys(obj).forEach(p => { if (!undesiredPropsObj[p]) newObj[p] = obj[p] });

简单地运行测试并不像听起来那样简单,因为所需和不需要的属性的数量会有所不同。

如果您暂时假设这些命令中的每一个都花费相同的时间来执行,那么执行较少命令的任务将更快地执行。 换句话说,如果与所需保留的属性数量相比,不需要的属性较少,则删除操作应该更快(反之亦然)。 虽然,除非我们谈论的是处理大量次的大型物体,否则节省的时间将是疏忽大意的。 我认为 :)

您可以在jsperf上进行基准测试并比较javascript代码。 我做到了,第一种方法比预期的要快(大约降低了66%-这可能有所不同)。

编辑:这是我使用的初始化代码:

  var undesiredPropsArray = [];
  var undesiredPropsObj = {};
  var obj = {};

  for (i=0;i<10000;i++) {
    obj[i] = null;
    if ((i%2) === 0) {
        undesiredPropsArray.push(i);
        undesiredPropsObj[i] = null;
    }
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM