我有单独的配置文件,这些配置文件是独立的,因为其中包含密码和其他敏感数据,而且我不介意看世界。所以我想说:
sensitivedata = { password : 'foobaz', hostname : 'quux' };
globalconfig = { timeout : 86400, port : 5190 };
我希望globalconfig
包含字段password
和hostname
。我可以这样做:
globalconfig.hostname = sensitivedata.hostname;
globalconfig.password = sensitivedata.password;
但是当有很多字段时这很乏味。作为一名perl程序员,我想做这样的事情:
@{ $globalconfig }{ keys %{ $sensitivedata } } =
@{ $sensitivedata }{ keys %{ $sensitivedata } };
# or ...
@{ $globalconfig }{ qw{ password hostname } } =
@{ $sensitivedata }{ qw{ password hostname } };
这也可以用map
来完成,但这正是我们在perl中使用hashrefslice语法的原因。是否有一种单一语句将一组字段从一个字典映射到另一个字典?
在我写这篇文章时,我发现它也可以在perl中执行:
subname( { %$globalconfig, %$sensitivedata } );
...它将两个哈希值连接成一个新的匿名哈希,以便传递它们的参数,但我不确定如何在javascript中“取消引用”字典/哈希。此解决方案还结合了两个词典,而没有专门引用元素(如果我只想要sensitivedata
中的globalconfig
只有一些但不是全部)。
请温柔;我不是故意煽动“我的语言与你的语言”的事情。我非常喜欢节点,我只是想借用我熟悉的习语并有效地编写代码。
答案 0 :(得分:3)
我不相信javascript提供了一种本地方式来做到这一点;如果你不是在谈论服务器端,https://github.com/stephenlb/jquery-hashslice/blob/master/jquery.hashslice.js可能会满足你的需求。
答案 1 :(得分:3)
如果您正在使用jQuery,那么有一个很好的extend函数:
$.extend(globaldata, sensitivedata);
否则我想你需要自己动手,但这并不难。有了最新版本的Javascript,它就是:
for (let [key, value] in Iterator(sensitivedata))
globaldata[key] = value;
by by,in Perl,
@{ $sensitivedata }{ keys %{ $sensitivedata } }
会更清楚地表达为
values %{ $sensitivedata }
答案 2 :(得分:0)
我无法让Iterator在node.js中工作,但我确实找到了Sean回答的解决方法。
for (var key in add_headers)
http_headers[key] = add_headers[key];