4

在 Python 中,如果您有一个由列表组成的字典,例如

   mydict = {'foo': [], 'bar':[3, 4]}

如果您想在该列表中添加一些内容,您可以执行

   mydict.setdefault('baz', []).append(5)

不用写

key, list_element = 'baz', 5
if key in mydict:
    mydict[key].append(list_element)
else:
    mydict[key] = [list_element]

Coffeescript 中是否有类似的功能?

4

3 回答 3

8

我建议不要使用||/or来测试成员资格——这基本上是一个聪明的技巧,它会默默地对虚假值失败。我更喜欢写作

( mydict[ name ]?= [] ).push value

我觉得更清楚;它假定如果mydict没有条目 forname或该值为nullor undefined,则此时应在此处放置一个空列表。

于 2013-08-23T19:02:03.020 回答
1

这是一种选择:

(mydict.baz or (mydict.baz = [])).push(5)

在这种情况下,CoffeeScript 与它生成的 JavaScript 极为相似:

(mydict.baz || (mydict.baz = [])).push(5);
于 2013-08-22T21:32:19.387 回答
0

如果你不介意雇用underscore.js.

http://underscorejs.org/#defaults

var iceCream = {flavor : "chocolate"};
_.defaults(iceCream, {flavor : "vanilla", sprinkles : "lots"});
=> {flavor : "chocolate", sprinkles : "lots"}
于 2013-08-23T02:48:15.600 回答