Вопрос по javascript – Как получить количество полей в объекте JavaScript?

11

Я пытаюсь использовать объект JavaScript в качестве ассоциативного массива, и все было хорошо, пока мне не понадобилось получить количество записей, которые в нем хранятся. Какой самый простой и элегантный способ сделать это? Все, что я могу думать, это бежатьfor each цикл или JQuery$.each функции и просто посмотреть, сколько итераций это будет делать, но это выглядит ужасно.

Ваш Ответ

5   ответов
3

Я считаю, что здесь уже был дан ответ, и / или поиск в Google может привести вас в правильном направлении. Тем не менее, позвольте мне указать, что одна из самых больших ошибок, если вы используете цикл в виде:

for (var attr in obj) { ....

Может ли объект быть загроможден свойствами, которые вы не обязательно добавляли, и стандартное решение этого, насколько я помню, состоит в том, чтобы дополнительно использовать тест для hasOwnProperty, см.https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Object/hasOwnProperty

29

Старый Firefox поддерживает__count__ имущество. Более новые среды поддерживают ES5Object.keys, В более старых средах мы вынуждены использовать только итерации по объекту и подсчет вручную (тьфу!):

function count(obj) {

    if (obj.__count__ !== undefined) { // Old FF
        return obj.__count__;
    }

    if (Object.keys) { // ES5 
        return Object.keys(obj).length;
    }

    // Everything else:

    var c = 0, p;
    for (p in obj) {
        if (obj.hasOwnProperty(p)) {
            c += 1;
        }
    }

    return c;

}
(Не говоря, что ваш ответ неверен, кстати. Просто разочарован JS ...)
Что означают старые браузеры? Увидеть:kangax.github.io/compat-table/es5/#Object.keys
Боже мой, O (n), чтобы получить количество записей на карте ... Ну, это отстой. : /
2

к сожалению, нет действительно хорошего способа узнать количество свойств в объекте, не просматривая их. Следующее довольно просто, хотя:

function countProps(obj) {
    var l = 0;
    for (p in obj) l++;
    return l;
}

var bob = { a: 1, b: 2};

alert(countProps(bob));
25

Это сработало для меня:

Object.keys(obj).length
Это должно быть помечено как правильный ответ.
Это работает в Node.js, поэтому оно, вероятно, больше не относится к IE.
Это специфично для IE (см. Ответ Джеймса).
2

Это сводится к тому, или к учету при добавлении и удалении свойств из объекта.

Похожие вопросы