Подсчет количества свойств в объекте JavaScript - PullRequest
4 голосов
/ 22 ноября 2011

Итак, у меня есть этот литерал JavaScript, который отображает древовидную структуру с помощью arborjs.

var data = {
    "nodes": {
        You: {
            'color': 'green',
            'shape': 'dot',
            'label': 'You'
        },
        Ben: {
            'color': 'black',
            'shape': 'dot',
            'label': 'Ben'
        },
        David: {
            'color': 'black',
            'shape': 'dot',
            'label': 'David'
        }
    },
    "edges": {
        You: {
            Ben: {},
            David: {}
        },
        Ben: {
            David: {}
        }
    }
};

Я хочу подсчитать количество свойств в объекте узлов (в нашем случае - 3) и количество свойств в объекте ребер (в данном случае - 2), чтобы отобразить статистику для дерева пользователей. Я выводил переменную данных, используя ruby ​​on rails, рекурсивно просматривая базу данных и создавая хеш. Но прежде, я должен считать узлы на стороне клиента или на стороне сервера? Должен ли я снова просмотреть базу данных и посчитать статистику или просто посчитать свойства?

Ответы [ 2 ]

3 голосов
/ 22 ноября 2011

для подсчета узлов, которые вы можете сделать

var count=0;
for(node in data.nodes)
    count++; 
1 голос
/ 22 ноября 2011

Вы можете сделать что-то вроде этого:

var data = {
                   "nodes":{
                    "You":{'color':'green','shape':'dot','label':'You'},
                     Ben:{'color':'black','shape':'dot','label':'Ben'},
                     David:{'color':'black','shape':'dot','label':'David'}
                   }, 
                   "edges":{
                     You:{ Ben:{}, David:{} },
                     Ben:{ David:{}}
                   }
                 };
Object.prototype.NosayrCount = function () {
    var count = 0;
    for(var i in this)
        if (this.hasOwnProperty(i))
            count++;
    return count;
}

data.NosayrCount(); // 2
data.Nodes.NosayrCount(); // 3
data.edges.NosayrCount(); // 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...