Проверка длины словарного объекта

Я пытаюсь проверить длину здесь. Пробовал подсчет. Что-то мне не хватает?

var dNames = {}; 
dNames = GetAllNames();

for (var i = 0, l = dName.length; i < l; i++) 
{
        alert("Name: " + dName[i].name);
}

dNames содержит пары имя/значение. Я знаю, что dNames имеет значения в этом объекте, но он все еще полностью пропускает это, и когда я предупреждаю даже dName.length, очевидно, что не так, как это сделать... так что не уверен. Посмотрел это в Интернете. Не удалось найти что-либо на этом.

Ответ 1

Я использую Object.keys(), чтобы вернуть список всех ключей, а затем получить длину этого

Object.keys(dictionary).length

Ответ 2

var c = {'a':'A', 'b':'B', 'c':'C'};
var count = 0;
for (var i in c) {
   if (c.hasOwnProperty(i)) count++;
}

alert(count);

Ответ 3

Этот вопрос запутан. Обычный объект {} не имеет свойства length, если вы не намереваетесь создать свой собственный конструктор функций, который генерирует пользовательские объекты, которые его имеют (в этом случае вы не указали).

Значение, вы должны получить "длину" оператором for..in для объекта, так как length не установлен и увеличивает счетчик.

Я смущен, почему вам нужен length. Вы вручную устанавливаете 0 на объект или используете стандартные строковые ключи? например, obj['foo'] = 'bar';. Если последнее, опять же, зачем нужна длина?

Изменить # 1. Почему вы не можете просто сделать это?

list = [ {name:'john'}, {name:'bob'} ];

Затем перебираем список? length уже установлен.

Ответ 4

Считать и показать ключи в словаре (запустить на консоли):

o=[];count=0; for (i in topicNames) { ++count; o.push(count+": "+ i) } o.join("\n")

Пример вывода:

"1: Phase-out Left-hand
2: Define All Top Level Taxonomies But Processes
3: 987
4: 16:00
5: Identify suppliers"

Простая функция подсчета:

function size_dict(d){c=0; for (i in d) ++c; return c}