【问题标题】:App script not returning object in proper order应用程序脚本未按正确顺序返回对象
【发布时间】:2020-04-15 06:17:14
【问题描述】:

大家下午好,

我对编码还很陌生。我因为喜欢解决问题和更好地改善我的业务管理而开始编码。如果我可能显得粗鲁,请原谅我。我希望向最好的人学习。

在我的脚本编辑器中,我有以下代码。

var parDetails = [];

//To add participant data into participant log
function addparDetails(code, name, dob, gender, health){ 
    parDetails.push({code, name, dob, gender, health});
    return parDetails;
    }

//Participant details [updated]
  for (let i = 0; i <= 1; i++){
    addparDetails("123151", "John Doe", "18 June 2000","M", "Asthma");
}
Logger.log(parDetails);

It should return in the order of 
{code = 123151
 name = John Doe
 date = 18 June 2000
 Gender = M
 Health = Asthma}

However, it keeps returning in this order 
{dob = 18 June 2000
 name = John Doe
 gender = M
 code = 123151
 Health = asthma}

sometimes it can also be in a different order|

有人能解释一下为什么会这样吗?如果您需要任何进一步的说明,请告诉我!

【问题讨论】:

    标签: javascript arrays function object google-apps-script


    【解决方案1】:

    parDetails.push({code, name, dob, gender, health});

    在这一行中,您将 javascript Object 推送到数组。

    对象是键值对,键的显示顺序没有定义。当你做{a}时,它与{a: a}相同。

    例如,

    var a = 5
    var b = {a} // Implicitly it is doing b = {a: 5}
    console.log(b.a) // To access the value
    

    你不能依赖键的顺序。

    【讨论】:

    • 所以为了得到我想要的值,我必须一一访问对象的属性?例如:console.log(parDetails.code);控制台.log(parDetails.name);等等?
    • 是的。您也可以将所有内容放在同一个 console.log(parDetails.code, parDetails.name, parDetails.dob ...) 中。另一种方法是使用 Object.keys(parDetails) 按字母顺序记录它们,但这需要复杂的记录逻辑,我不推荐它。
    • 那是我之前的代码方法。我正在寻求改进它,因为即使你很简单,它也是漫长而乏味的。看来我暂时别无选择,直到我了解更多:(
    • 如果您绝对想要保证日志记录的顺序,您可以使用 Map 代替。 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
    【解决方案2】:

    这是 objects 在 javascript 中的工作方式。不能保证它们的键值对的顺序保持不变。你应该试试Maphttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map

    Map 对象保存键值对并记住键的原始插入顺序。

    【讨论】:

    • 哎呀..我还没有了解到这一点。我会阅读它,看看它是否可以帮助我。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2018-04-21
    • 1970-01-01
    • 2019-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多