我有以下代码
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.length
和 params.length
将始终相等。
最佳答案
下划线的object
函数正是您所寻找的。将其与 _.extend
结合起来:
class A
constructor: (@message) ->
parse: (paramNames...) ->
params = @message.split(/\s/)
_.extend @, (_.object paramNames, params)
如果您不使用Underscore,我认为您当前的解决方案已经非常清晰和简单。
关于javascript - 如何在coffeescript中将两个数组压缩到一个对象中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13907705/