如何获得Object
中的属性数量,而没有与Object.keys().length
相关联的性能损失?
答案 0 :(得分:1)
您可以切换到Map,它类似于Object,但您也可以获得它的大小,并迭代键。它受到许多浏览器的支持,对于较旧的浏览器,它有polyfill。
答案 1 :(得分:1)
如果你想快速接近,基本上你有两种可能:
手动跟踪对象的大小。将大小存储在变量中,在创建属性时增加它,在删除时减小它。
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
答案 2 :(得分:0)
你可以做一个for-in循环,它非常快。基本上,它遍历对象中的所有键,并为每个键递增计数器。根据我的控制台中的快速基准测试,它比Object.keys()快5倍。长度
var counter = 0;
for(var i in obj){
counter++;
}