CoffeeScript:为对象指定值

CoffeeScript:为对象指定值,coffeescript,Coffeescript,假设我有以下目标: dict = { a: 1, b: 2, c: 3 } 以下几点效果很好: {a, b} = dict // -> a = 1 // -> b = 2 现在我想操纵这些数字,并将其写回对象,显然下面这行行不通: // some manipulations dict = {a, b} 显然,我已经覆盖了dict对象。我基本上想做的是分配dict.a=a和dict.b=b,使dict.c保持原样 是否可以用某种简短的符号来实现我的目标?假设您使用的是下划线.js

假设我有以下目标:

dict = { a: 1, b: 2, c: 3 }
以下几点效果很好:

{a, b} = dict
// -> a = 1
// -> b = 2
现在我想操纵这些数字,并将其写回对象,显然下面这行行不通:

// some manipulations
dict = {a, b}
显然,我已经覆盖了
dict
对象。我基本上想做的是分配
dict.a=a
dict.b=b
,使
dict.c
保持原样


是否可以用某种简短的符号来实现我的目标?

假设您使用的是下划线.js,我会这样做:

dict = { a: 1, b: 2, c: 3 }
{a, b} = dict
...
dict = _.extend dict, {a:a, b:b}

正如asawyer指出的,jQuery中也有一个类似的扩展函数。

假设您使用的是下划线.js,我会这样做:

dict = { a: 1, b: 2, c: 3 }
{a, b} = dict
...
dict = _.extend dict, {a:a, b:b}
正如asawyer指出的,jQuery中也有类似的扩展函数。

在纯咖啡脚本中:

extend = (a, others...) ->
  for o in others
    a[key] = val for key, val of o
  a

dict = { a: 1, b: 2, c: 3 }
{a, b} = dict

a = 5
b = 8

extend dict, {a, b}

console.log dict
#dict = { a: 5, b: 8, c: 3 }
纯咖啡脚本:

extend = (a, others...) ->
  for o in others
    a[key] = val for key, val of o
  a

dict = { a: 1, b: 2, c: 3 }
{a, b} = dict

a = 5
b = 8

extend dict, {a, b}

console.log dict
#dict = { a: 5, b: 8, c: 3 }

可以使用以下方法将对象的切片提取到单独的局部变量中:

{a, b} = dict
但是,无法指定对象的某个切片,即,您不能执行以下操作:

dict{a, b} = [ x, y ]
obj = dict{a, b}
作为一条捷径

dict.a = x
dict.b = y
您甚至无法使用以下内容将对象切片提取到新对象中:

dict{a, b} = [ x, y ]
obj = dict{a, b}
您必须分两步进行:

{ a, b } = dict
obj      = { a, b }
可以很好地从对象中提取内容,但在将内容放回对象中时没有那么大的用处。我认为最接近的方法是使用非结构化数组分配:

[ dict.a, dict.b ] = [ a, b ]
如果使用多个键,则可以将这些键放入一个数组中,并使用循环进行切片和合并(可能使用helper函数包装):


或者只使用下划线jQuery。。。实用函数。

您可以使用以下方法将对象的一部分提取到单独的局部变量中:

{a, b} = dict
但是,无法指定对象的某个切片,即,您不能执行以下操作:

dict{a, b} = [ x, y ]
obj = dict{a, b}
作为一条捷径

dict.a = x
dict.b = y
您甚至无法使用以下内容将对象切片提取到新对象中:

dict{a, b} = [ x, y ]
obj = dict{a, b}
您必须分两步进行:

{ a, b } = dict
obj      = { a, b }
可以很好地从对象中提取内容,但在将内容放回对象中时没有那么大的用处。我认为最接近的方法是使用非结构化数组分配:

[ dict.a, dict.b ] = [ a, b ]
如果使用多个键,则可以将这些键放入一个数组中,并使用循环进行切片和合并(可能使用helper函数包装):


或者只使用下划线jQuery。。。实用程序函数。

使用
extend(…)
样式函数,如下所示:使用
extend(…)
样式函数,如下所示:
修改其第一个参数,因此您不需要赋值。或者更好的是:。另外,
.extend
将修改
dict
对象本身,因此无需重新分配它:)(编辑:似乎mu比我还短,呵呵)考虑到我没有使用任何框架,也没有编写任何帮助函数,我原来问题的简短答案是否定的?@Amberlamps:我认为简短答案是否定的,冗长的漫无边际的答案在下面(或上面,取决于投票)。
\uExtend
修改了它的第一个参数,所以你不需要赋值。或者更好的是:。另外,
.extend
将修改
dict
对象本身,因此无需重新分配它:)(编辑:似乎mu比我还短,呵呵)考虑到我没有使用任何框架,也没有编写任何帮助函数,我原来问题的简短答案是否定的?@Amberlamps:我认为简短答案是否定的,冗长的漫无边际的答案在下面(或上面,取决于投票)。考虑到我没有使用任何框架,也没有参与编写任何帮助函数,我原来问题的简短答案是否定的?可能,我不知道没有声明函数的其他方法。考虑到我没有使用任何框架,也没有参与编写任何帮助函数,我原始问题的简短答案是“否”?可能,我不知道没有声明函数的其他方法。