Javascript 检查字典对象的长度

Javascript 检查字典对象的长度,javascript,Javascript,我想检查一下这里的长度。我试着数数。有什么我遗漏的吗 var dNames = {}; dNames = GetAllNames(); for (var i = 0, l = dName.length; i < l; i++) { alert("Name: " + dName[i].name); } var-dNames={}; dNames=GetAllNames(); 对于(变量i=0,l=dName.length;i

我想检查一下这里的长度。我试着数数。有什么我遗漏的吗

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

for (var i = 0, l = dName.length; i < l; i++) 
{
        alert("Name: " + dName[i].name);
}
var-dNames={};
dNames=GetAllNames();
对于(变量i=0,l=dName.length;i

dNames保存名称/值对。我知道dNames在那个对象中有值,但它仍然完全跳过了那个值,当我警告甚至是dName.length时,显然这不是怎么做的…所以不确定。在网上查到的。找不到此问题的任何内容。

此问题令人困惑。常规对象,
{}
没有
length
属性,除非您打算创建自己的函数构造函数,该构造函数生成具有该属性的自定义对象(在这种情况下,您没有指定)

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

alert(count);
也就是说,由于未设置
length
,因此必须通过对象上的
for..语句中的
来获取“length”,并增加一个计数器

我不明白你为什么需要
长度
。您是在对象上手动设置
0
,还是依赖自定义字符串键?例如
obj['foo']='bar'。如果是后者,又为什么需要长度呢

编辑#1:为什么你不能这样做

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

然后迭代列表?
长度
已设置

在字典中计数和显示键(在控制台中运行):

样本输出:

"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}

我要做的是使用Object.keys()返回所有键的列表,然后获取其长度

Object.keys(dictionary).length

好的,所以你必须迭代…没有办法通过一个有名称/值的自定义对象来完成吗?我认为没有。确保检查“hasOwnProperty”以停止原型链上的迭代,只检查属性。谢谢。我更喜欢OOP,但开始更习惯JS。这是JS中最可靠的方法。请参见斯贝里关于
hasOwnProperty
的注释。关键是@coffeeaddict,JS对象的行为可以类似于其他语言中的“集合”对象,但本质上不同。因此,令人费解的是,它缺少一种方便的方法来获取它的属性总数。在普通对象上没有“length”属性。这是数组实例所具有的特性。好的,有人知道如何正确或礼貌地给出答案吗?我知道斯贝里想出了真正的“答案”,但梅德尔能够向我这样的中间人解释。我不想惹恼任何人。你将答案授予为你提供答案的人。因此数组具有count属性…因为for可能内置于JS本机类型中?
[]
具有
长度
{}
没有。使用
for
循环
长度
for
[]
for..in
for
{}
。回答你的问题是的,这很混乱,因为我不是JS人,我是C人。因此,我需要检查字典的长度,以测试字典中是否有任何对象。对于常规错误处理,我想您只需要检查字典上的null,但只想看看有多少返回并添加到我的字典中。所以问题不在于如何迭代,而在于如何获得计数,我只是认为可以用字典类型(nvp)对象来计算;这是一种可以作为字典的交易,正是我所需要的!为仍然支持IE8的其他人欢呼:没有骰子。在Chrome53中,我看到Object.keys(dictionary)报告的长度为1,尽管它是一个空字典。它有一个名为“$type”的条目。这是最常用的解决方案,也可能是最糟糕的解决方案,您必须遍历整个字典以获得长度,因此它应该是O(n)而不是O(1),因为既然javascript有了映射对象,那么最好使用它并使用新的Map().size
Object.keys(dictionary).length