2012-12-17 29 views
1

我有以下代碼如何將兩個數組壓縮到coffeescript中的對象中?

class A 

    constructor: (@message) -> 

    parse: (paramNames...) -> 
    params = @message.split(/\s/) 
    for value, i in params 
     @[paramNames[i]] = value 

a = new A('foo bar dim sum') 
a.parse 'first', 'second', 'third', 'fourth' 
console.log a 

輸出

{ 
    message: 'foo bar dim sum', 
    first: 'foo', 
    second: 'bar', 
    third: 'dim', 
    fourth: 'sum' 
} 

一切正常,我只是覺得像parse方法可以做乾淨了一點。看起來我做錯了:S

parse()永遠不會被用戶調用;它只在我正在寫的庫內部使用。假設paramNames.lengthparams.length總是等於是安全的。

+0

它怎麼可能更清潔?它看起來很完美。 – McGarnagle

回答

1

下劃線的object功能只是你要找的東西。結合與_.extend

class A 

    constructor: (@message) -> 

    parse: (paramNames...) -> 
    params = @message.split(/\s/) 
    _.extend @, (_.object paramNames, params) 

如果你不使用下劃線,我認爲你目前的解決方案已經是非常簡單明瞭。

0

您可以使用字符串替換功能,這樣的事情:

parse : (paramNames...) -> 
    keyCount = 0 
    @message.replace(/(\b\w+\b)/g , (match)-> 
     @[paramNames[keyCount++]] = match 
    ) 

它比做分割方法,然後更高效的迭代您使用的是你的代碼。只要確保我使用的RegExp滿足您的需求,您可以將其改爲任何您需要的。

+0

我認爲'/ \ b \ S + \ b /'會是我的正則表達式的倒數 – naomik

相關問題