咖啡脚本一行,用于创建带有变量键的哈希图

Coffeescript one liner for creating hashmap with variable key

本文关键字:创建 变量 哈希图 用于 脚本 一行 咖啡      更新时间:2023-09-26

是否可以在咖啡脚本中的一行中执行以下操作?

obj = {}
obj[key] = value

我试过了:

obj = { "#{key}": value }

但它不起作用。

它已从语言中删除

对不起,迟到了——如果我没记错的话,那是因为有些 我们的其他语言功能取决于在 编译时。例如,方法重写和超级调用 可执行类体。我们想知道密钥的名称,以便 可以构造适当的超级调用。

此外,它使您必须在使用时关闭包装对象 作为表达式(常见情况),只要您有动态键。

最后,JavaScript 中动态键已经有一个很好的语法。 明确说明您正在做的事情:obj[key] = value.

拥有{key: value, key: value}形式有一些好处 仅限于"纯"标识符作为键。

(obj = {})[key] = value

将编译为

var obj;
(obj = {})[key] = value;

这是正常的JavaScript。你从coffeescript得到的唯一好处是你不必预先声明var s因为它为你做了。

对于将来发现此问题的任何人,从 CoffeeScript 1.9.1 开始,再次支持插值对象文字键!

语法如下所示:

myObject =
  a: 1
  "#{ 1 + 2 }": 3

请参阅 https://github.com/jashkenas/coffeescript/commit/76c076db555c9ac7c325c3b285cd74644a9bf0d2

根据键的复杂程度,您始终可以使用与键匹配的变量名称并使用它来定义对象,如下所示:

myKey = "Some Value"
obj = {myKey}

这将编译为:

var myKey, obj;
myKey = "Some Value";
obj = {
  myKey: myKey
};

因此,您最终得到的与您所寻求的接近,但这需要您的键是有效的变量名称。

如果使用下划线,则可以使用 _.object 函数,该函数与_.pairs函数相反。

_.pairs({a: 1, b: 'hello'})
//=> [['a', 1], ['b', 'hello']]
_.object([['a', 1], ['b', 'hello']])
//=> {a: 1, b: 'hello'}

因此,假设myKey = 'superkey'myValue = 100您可以使用:

var obj = _.object([[myKey, myValue]]);
//=> obj = {superkey: 100}