Object.keys(obj).length的快速替代品

时间:2016-05-23 03:28:38

标签: javascript

如何获得Object中的属性数量,而没有与Object.keys().length相关联的性能损失?

3 个答案:

答案 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++;
}