Object.keys(obj).length медленный. Есть ли способы быстрее?
Привет.
Для больших объектов Object.keys(obj).length довольно медленный особенно в Chrome. Самый быстрый в FF. Ну то есть у меня к примеру следующий код в Chrome выполняется больше полсекунды. Это уже многовато. Есть ли способы быстрее посчитать кол-во свойств у объекта? var i,data={},count1,count2,t1,t2,str=""; for (i=1;i<=777777;i++) data["id"+i]="string"+Math.random(); //1 t1 = performance.now(); count1=Object.keys(data).length; t2 = performance.now(); //console.log("Время (1 вариант): "+(t2-t1).toFixed(4)+" мс\n\n"); str="Время (1 вариант): "+(t2-t1).toFixed(4)+" мс\n\n"; //2 t1 = performance.now(); count2=0; for (i in data) { count2++; } t2 = performance.now(); //console.log("Время (2 вариант): "+(t2-t1).toFixed(4)+" мс\n\n"); str+="Время (2 вариант): "+(t2-t1).toFixed(4)+" мс\n\n"; alert(str); |
Используй Map. У объектов Map есть свойство size.
|
А если изначально есть только объект. Можно его как-то в map преобразовать?
Тут непонятна такая тема, по идее Object.keys(data).length это просто кол-во свойств, ну как array.length, т.е. он должен моментально возвращать, а получается что видимо браузеры их считают что ли. FF правда быстрее всех. |
Кстати как с поддержкой map в браузерах?
Здесь вот обозначено что это только стандарт ES-2015 |
Object.keys.length это не array.length ))
это что то такое ))) Object.prototype.KEYS = function () { var arr = []; for(var i in this) if(this.hasOwnProperty(i)) arr.push(i) return arr; } если объект сам создаешь то просто записывай свойство length в объект и enumerable = false https://developer.mozilla.org/ru/doc...defineProperty |
Цитата:
|
Часовой пояс GMT +3, время: 14:18. |