【发布时间】:2018-10-15 20:33:51
【问题描述】:
我正在研究 Alexa Skill lambda,并创建了小代码片段来说明我的问题:
exports.handler = function(event, context)
{
//CREATE A MODEL
var model1 = {"endpoints":[ ]};
//CREATE ANOTHER MODEL
var model2 = {"endpointid": "stuff"};
//CREATE THE RESULT
var result = model1;
model2.endpointid="switch1";
result.endpoints.push(model2);
model2.endpointid="switch2";
result.endpoints.push(model2);
var json = JSON.stringify(result);
context.succeed({json});
};
回复:
{
"json": "{\"endpoints\":[{\"endpointid\":\"switch2\"},{\"endpointid\":\"switch2\"}]}"
}
问题:为什么我得到两个相同的endpointids?
【问题讨论】:
-
您将 reference 到
model2推送到endpoints数组中,而不是对象的副本。事实上,在函数体的最后,result和model1会一模一样,因为result是对model1的引用(实际上比那)。你可以在这里阅读更多:Is JavaScript a pass-by-reference or pass-by-value language?. -
关于如何更改代码的任何建议?到目前为止,我的解决方案很丑陋或仍然会产生结果
-
这行得通,但我确实觉得它很优雅:
标签: node.js aws-lambda alexa