【问题标题】:Not understand node.js results when using PUSH使用 PUSH 时不理解 node.js 结果
【发布时间】: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?

【问题讨论】:

  • 您将 referencemodel2 推送到 endpoints 数组中,而不是对象的副本。事实上,在函数体的最后,resultmodel1一模一样,因为result 是对model1 的引用(实际上比那)。你可以在这里阅读更多:Is JavaScript a pass-by-reference or pass-by-value language?.
  • 关于如何更改代码的任何建议?到目前为止,我的解决方案很丑陋或仍然会产生结果
  • 这行得通,但我确实觉得它很优雅:

标签: node.js aws-lambda alexa


【解决方案1】:

这可行,但我觉得它不是那么优雅:

exports.handler = function(event, context)
{
    //CREATE A MODEL
    var model1 = {"endpoints":[ ]};

    //CREATE ANOTHER MODEL  
    var model2 = {"endpointid": "stuff"};

    //CREATE THE RESULT

    model1.endpoints.push(model2);
    model1.endpoints.push(model2);
    model1.endpoints[0]="switch1";
    model1.endpoints[1]="switch2";

     var  json = JSON.stringify(model1);
   context.succeed({json});

响应:"json": "{\"endpoints\":[\"switch1\",\"switch2\"]}"

【讨论】:

  • 我猜在 foreach 循环中还不错:-)
  • 其实我看这个我不知道它是如何工作的
【解决方案2】:

如果您是 JAVA 和 node.js 的新手,肯定有点难以理解:

  exports.handler = function(event, context)
   {
      //CREATE A MODEL
      var model1 = {"endpoints":[ ]};

      //CREATE ANOTHER MODEL  
      var model2 = {"endpointid": "stuff","friendly Name": "name"};

     //CREATE THE RESULT


     var  _copy1ofModel2 =JSON.parse (JSON.stringify (model2));
     var  _copy2ofModel2 =JSON.parse (JSON.stringify (model2));

     _copy1ofModel2.endpointid = "switch 1";
     _copy2ofModel2.endpointid = "switch 2";

     model1.endpoints.push(_copy1ofModel2);
     model1.endpoints.push(_copy2ofModel2);


    var  json = JSON.stringify(model1);
    context.succeed({json});

};

回应: { "json": "{\"endpoints\":[{\"endpointid\":\"switch 1\",\"友好名称\":\"name\"},{\"endpointid\":\"切换 2\",\"友好名称\":\"名称\"}]}"。

感谢 eebbesen 让我找到正确的方向。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-01
    • 2012-11-27
    • 1970-01-01
    • 2012-08-22
    • 1970-01-01
    • 2017-12-01
    相关资源
    最近更新 更多