Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.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 快速替代对象。关键点(obj)。长度_Javascript - Fatal编程技术网

Javascript 快速替代对象。关键点(obj)。长度

Javascript 快速替代对象。关键点(obj)。长度,javascript,Javascript,如何获得对象中的属性数量,而不产生与对象.keys().length相关联的性能损失?您可以切换到,它与对象类似,但也可以获得对象的大小,并遍历键。许多浏览器都支持它,而对于较旧的浏览器,则有多边形填充。您可以切换到,这类似于Object,但您也可以获得它的大小,并遍历键。许多浏览器都支持它,对于较旧的浏览器,有PolyFill。如果您想要快速的方法,基本上有两种可能性: 手动跟踪对象的大小。将大小存储在变量中,在创建属性时增大,在删除时减小 var myObj = {}, size

如何获得
对象中的属性数量
,而不产生与
对象.keys().length
相关联的性能损失?

您可以切换到,它与对象类似,但也可以获得对象的大小,并遍历键。许多浏览器都支持它,而对于较旧的浏览器,则有多边形填充。

您可以切换到,这类似于Object,但您也可以获得它的大小,并遍历键。许多浏览器都支持它,对于较旧的浏览器,有PolyFill。

如果您想要快速的方法,基本上有两种可能性:

  • 手动跟踪对象的大小。将大小存储在变量中,在创建属性时增大,在删除时减小

    var myObj = {},
        size = 0;
    myObj.foo = 1; ++size;
    myObj.bar = 2; ++size;
    size; // 2
    
  • 使用类似的数据结构公开大小。例如,ES6地图

    var myMap = new Map();
    myMap.set("foo", 1);
    myMap.set("bar", 2);
    myMap.size; // 2
    

如果你想快速接近,基本上你有两种可能:

  • 手动跟踪对象的大小。将大小存储在变量中,在创建属性时增大,在删除时减小

    var myObj = {},
        size = 0;
    myObj.foo = 1; ++size;
    myObj.bar = 2; ++size;
    size; // 2
    
  • 使用类似的数据结构公开大小。例如,ES6地图

    var myMap = new Map();
    myMap.set("foo", 1);
    myMap.set("bar", 2);
    myMap.size; // 2
    

你可以做一个for-in循环,它非常快。基本上,它遍历对象中的所有键,并为每个键增加计数器。基于我的控制台中的快速基准测试,它大约比Object.keys().length快5倍


你可以做一个for-in循环,速度很快。基本上,它遍历对象中的所有键,并为每个键增加计数器。基于我的控制台中的快速基准测试,它大约比Object.keys().length快5倍


你不可能复制,但是
Object.keys
速度非常快出于好奇可能复制,你说的是什么“性能损失”@guest271314你如何准确地使用
JSON.stringify()
计算属性?你不可能复制,但是
Object.keys
无论如何都非常快出于好奇可能会复制,你说的“性能损失”是什么?@guest271314如何准确地使用
JSON.stringify()
来计算属性?在这段代码中,似乎使用Map()实际上并不比使用普通对象和运行对象.keys()快多少。我知道这是一个存根,但你会期望
Map
在更大的集合上更快吗?@dandavis我不仅仅期望它。一定要快一点。地图操作要求与地图的大小(
对象)呈次线性(平均)。键
呈线性(除非它已被缓存或其他东西)。@Oriel:为什么这些结果似乎与您所说的“必须更快”相矛盾:?我对他们进行了一系列调查,但我从未见过一张地图比一个物体更出色。。。我相信你(很多),但我喜欢核实;)@丹达维斯:我认为测试应该更多。地图:0.1,目标:2150。映射的优点在大小很大时是显而易见的。根据循环列表项并返回计数的规范,Object.keys应该花费更长的时间。但是有两个循环:一个在,然后一个在当然速度也取决于供应商的实现在代码中,似乎使用Map()实际上并不比使用普通对象和运行object.keys()快。我知道这是一个存根,但你会期望
Map
在更大的集合上更快吗?@dandavis我不仅仅期望它。一定要快一点。地图操作要求与地图的大小(
对象)呈次线性(平均)。键
呈线性(除非它已被缓存或其他东西)。@Oriel:为什么这些结果似乎与您所说的“必须更快”相矛盾:?我对他们进行了一系列调查,但我从未见过一张地图比一个物体更出色。。。我相信你(很多),但我喜欢核实;)@丹达维斯:我认为测试应该更多。地图:0.1,目标:2150。映射的优点在大小很大时是显而易见的。根据循环列表项并返回计数的规范,Object.keys应该花费更长的时间。然而,有两个循环:一个在课程中,另一个在课程中,速度也取决于供应商的实施。虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接以供参考。如果链接页面发生更改,则仅链接答案可能无效。虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接以供参考。如果链接页面发生更改,则仅链接的答案可能无效