2013-03-26 11 views

Odpowiedz

13
Object.keys(obj).length 

To powinno działać w ten sam sposób w coffeescript

see example

+1

Uwaga ta jest obsługiwana tylko w przeglądarkach, które wdrażają standard ECMAScript 5. Na przykład IE8 i wcześniejsze dusi się na tym. Zobacz mój przykład poniżej dla konkretnego rozwiązania coffeescript, które jest przeglądarką. – jondavidjohn

9

Jeśli martwisz się o wsparcie przeglądarki starszego

Object.keys(obj).length 

jest ECMAScript 5 Rozwiązanie

Jednak jeśli chcesz wspierać IE8 i earli er Jest to dość dyskretny coffeescript konkretnego rozwiązania

(k for own k of obj).length 

ta wykorzystuje coffeescript na Comprehension Syntax zbudować tablicę kluczy

keys = (k for own k of obj) # Array of keys from obj 

a następnie wywołuje długość na tej tablicy

Example with compiled JavaScript

+0

Drugi kod wydaje mi się tajemniczy. Czy mogę podać trochę więcej wyjaśnień? – Jokester

+1

@Jokester Dodano kilka szczegółów i łączy, aby lepiej zrozumieć przykład. – jondavidjohn

0

I utworzyć prototypową funkcję keys:

Object.defineProperty Object.prototype, 'keys', 
    enumerable : false, 
    writable : true, 
    value: -> 
     return (key for own key of @) 

tak, że mogę po prostu używać go tak jak to

nodes_Ids: -> 
    return _nodes_By_Id.keys() 

który jest stosowany w tym teście

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')