使用Coffeescript计算对象中键的数量

7

我想知道我的coffeescript对象中有多少个键。

在js中可以使用以下代码:

Object.keys(obj).length

在Coffeescript中有没有相应的方法?

3个回答

13
Object.keys(obj).length

在coffeescript中应该以相同的方式工作

查看示例


1
请注意,此功能仅受支持于实现ECMAScript 5标准的浏览器中。例如,IE8及更早版本将无法处理此功能。请参见下面我的示例,了解适用于所有浏览器的Coffeescript特定解决方案。 - jondavidjohn

10

如果您担心旧版浏览器的支持

Object.keys(obj).length

这是一个 ECMAScript 5 的解决方案。

但是,如果你想支持 IE8 及更早版本,则可以使用一个相对不显眼的 Coffeescript 特定的解决方案。

(k for own k of obj).length

这里使用了CoffeeScript的Comprehension Syntax来构建一个键数组。
keys = (k for own k of obj)  # Array of keys from obj

然后在该数组上调用length方法。

编译后的JavaScript示例


第二段代码对我来说看起来很神秘。能否再给我一点解释? - Jokester
1
@Jokester 添加了一些细节和链接,以帮助更好地理解示例。 - jondavidjohn

0
我创建了一个名为 keys 的原型函数:
Object.defineProperty Object.prototype, 'keys',
    enumerable  : false,
    writable    : true,
    value: ->
        return (key for own key of @)

这样我就可以像这样使用它了

nodes_Ids: ->
  return _nodes_By_Id.keys()

这是在此测试中使用的

it 'add_Node',->
  visGraph = Vis_Graph.ctor()
  visGraph.add_Node('a' ).nodes.assert_Size_Is(1)
  visGraph.add_Node('a' ).nodes.assert_Size_Is(1)
  visGraph.add_Node(    ).nodes.assert_Size_Is(1)
  visGraph.add_Node(null).nodes.assert_Size_Is(1)
  visGraph.add_Node('b' ).nodes.assert_Size_Is(2)
  visGraph.nodes_Ids()   .assert_Contains     ('a' )
  visGraph.nodes_Ids()   .assert_Contains     ('b')
  visGraph.nodes_Ids()   .assert_Not_Contains ('c' )

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接