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

Это в основном правильно, хотя на третьей строке отсутствует «=>». Но я получаю ошибку «null - это не объект (оценка« it.isempty »)» при вызове «[1, null, 2] .compact()» –

+0

Возможно, добавьте фразу вверху «| не так ли? => false "? –

+0

Да, как я сказал немного ржавый - главное - общая концепция. Я предполагаю, что ваше предложение будет более семантически правильным в отношении исходного кода. –