Сообщение от Маэстро
|
Вообще мне нравятся решения "в одну строку". Я, пожалуй, всё же возьму Ваш вариант. Только у меня пока еще есть смутные сомнения насчет него - надо всячески потестировать при разных вариантах заполнения объекта и удаления его свойств, проверить быстродействие.
|
вот дока, на всякий.
http://es5.javascript.ru/x15.4.html#x15.4.4.12
вообще, самым быстрым вариантом будет вариант
Slavenin, при приведении примитивов в объекты, конечно.
Сообщение от Маэстро
|
А вот посмотрите/прокомментируйте, пожалуйста, примерчик, который я нашел в инете. В частности касательно установки length:
|
он так же не позволяет изменять ключи.
Сообщение от Маэстро
|
А всё-таки, в Вашем алгоритме свойство length что должно хранить?
|
длину значений - см. массив.
Сообщение от Маэстро
|
при подсчете количества учтет не только свойства с числовыми индексами, но еще прибавит к счетчику и само свойство length.
|
конечно. код слишком упрощён, чтобы его использовать в голом виде
было бы неплохо не учитывать унаследованные свойства и проверять ключ на принадлежность к числу.
var length = 0, i;
for (i in obj) if (obj.hasOwnProperty(i) && isFinite(i)) {
length += 1;
}
obj.length = length;