【问题标题】:Checking length of dictionary object [duplicate]检查字典对象的长度[重复]
【发布时间】:2011-03-21 05:23:00
【问题描述】:

我正在尝试检查这里的长度。试过算了。我有什么遗漏吗?

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

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

dNames 保存名称/值对。我知道 dNames 在该对象中有值,但它仍然完全跳过它,当我发出警报时,甚至 dName.length 显然这不是如何做到这一点......所以不确定。在网上查了一下。在此找不到任何内容。

【问题讨论】:

  • 普通对象没有“长度”属性。这就是 Array 实例所具备的。
  • 好的,有人知道奖励答案的正确或礼貌方式吗?我知道 sberry 想出了真正的“答案”,但 meder 能够向像我这样的中级 JS 人解释它。我不想惹恼任何人。
  • 您将答案授予为您工作的人。

标签: javascript


【解决方案1】:
var c = {'a':'A', 'b':'B', 'c':'C'};
var count = 0;
for (var i in c) {
   if (c.hasOwnProperty(i)) count++;
}

alert(count);

【讨论】:

  • 好的,所以你必须遍历...没有办法关闭具有名称/值的自定义对象?
  • 我不认为有。确保检查“hasOwnProperty”以停止沿原型链向下迭代并仅检查属性。
  • 谢谢..我更喜欢 OOP,但开始更习惯 JS。
  • 这是在 JS 中最可靠的方法。请参阅 sberry 关于hasOwnProperty 的注释。关键,@coffeeaddict,是 JS 对象可以表现得像其他语言中的“集合”对象,但在本质上并不相同。因此,令人费解的是缺乏一种方便的方法来获取其上的属性总数。
【解决方案2】:

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

意思是,您必须通过对象上的for..in 语句获取“长度”,因为未设置length,并增加一个计数器。

我对您为什么需要length 感到困惑。您是在对象上手动设置0,还是依赖自定义字符串键?例如obj['foo'] = 'bar';。如果是后者,为什么需要长度?

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

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

然后遍历列表? length 已设置。

【讨论】:

  • 所以一个数组有一个 count 属性...因为可能 for 是内置在 JS 原生类型中的?
  • []length{} 没有。使用for 循环,length 用于[]for..in 用于{}
  • 回答你的问题是的,这很令人困惑,因为我不是 JS 人,我是 C# 人。所以我需要检查我的字典的长度来测试它是否有任何对象。对于常规错误处理,我想您只需在字典上检查 null ,但只想查看返回的数量并添加到我的字典中。所以问题不在于如何迭代,只是看看如何获​​得我认为你可以使用字典类型(nvp)对象这么说的计数。
  • 是的,我正在使用 obj['foo'] = 'bar';交易类型以获得充当字典的东西。
【解决方案3】:

计算并显示字典中的键(在控制台中运行):

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}

【讨论】:

    【解决方案4】:

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

    Object.keys(dictionary).length
    

    【讨论】:

    • 正是我需要的!干杯
    • 仅供其他仍然支持 IE8 的人参考:没有骰子。 link
    • 在 Chrome 53 中,我看到 Object.keys(dictionary) 报告长度为 1,即使它是一个空字典。它有一个名为“$type”的条目。
    • 最常用的解决方案,也可能是最糟糕的解决方案,您必须遍历整个字典才能获得长度,所以它应该是 O(n) 而不是 O(1),呃跨度>
    • 既然 javascript 有 Map 对象,最好使用它并使用 new Map().size
    猜你喜欢
    • 1970-01-01
    • 2011-05-01
    • 2017-03-30
    • 2011-03-15
    • 1970-01-01
    • 1970-01-01
    • 2011-11-19
    • 2021-04-03
    • 2021-11-14
    相关资源
    最近更新 更多