2016-04-03 55 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

字面翻譯看起來像這樣。

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

更地道的例子可能是:

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] 

當心,因爲這是我的頭我的任何的LiveScript有點生鏽的頂部做了,但這裏的總體思路是好的。

+0

雖然您在第三行中缺少「=>」,但它大部分都是正確的。但是,當調用「[1,null,2] .compact()」時,我得到錯誤「null不是一個對象(評估'it.isempty')」 –

+0

或許在頂部添加一個案例「|不是嗎? => false「? –

+0

是的,正如我所說的有點生疏 - 重要的是一般概念。我想你的建議在原始代碼方面也會更符合語義。 –