2016-04-03 1 views
0

私は配列を平らにするために、このGorillaScriptコードを持っている:このGorillaScriptをLiveScriptに変換するには?

Array::compact := # 
    for filter value in this 
    value and (typeof value.isempty != 'function' or not value.isempty()) and (typeof value != 'object' or Object.keys(value).length != 0) 

GorillaScriptはちょっと死んでいます。誰かがこれを私のためにLiveScriptに翻訳できますか?私はLiveScriptの新機能です。

答えて

1

リテラルの翻訳は次のようになります。これはどんな私のLiveScriptは少し錆びです、私の頭の上から行われていたとして

is-empty = -> 
    | not it => false 
    | typeof it.isempty isnt \function or not it.isempty! => true 
    | typeof it isnt \object or not Object.keys it .length > 0 => true 
    | otherwise => it 

Array.prototype.compact = -> [x for x in @ when not is-empty x] 

は、気をつけてますが、ここでは一般的なアイデアはOKです:

Array.prototype.compact = -> 
    [v for v in @ when v and (typeof v.isempty isnt \function or not v.isempty!) and (typeof v isnt \object or Object.keys value .length > 0)] 

より多くの慣用的な例があるかもしれません。

+0

3番目の行に "=>"がありません。しかし、 "[1、null、2] .compact()を呼び出すときに" nullはオブジェクトではありません(評価する 'it.isempty') "というエラーが発生します。 –

+0

おそらくトップにケースを追加しますか? => false? –

+0

ええ、私が少し錆びたと言ったように、重要なのは一般的な概念です。あなたの提案は元のコードに関してより意味的に正しいと思います。 –

関連する問題