【问题标题】:Dictionary sorted differently when passing flask to JS将烧瓶传递给 JS 时字典排序不同
【发布时间】:2020-04-02 22:28:39
【问题描述】:

我正在 python Flask 中创建一个包含字符串的字典。 顺序是这样的:

dict =  {01:'string1', 02:'string', 03:'string3',..., 10:'string10', 11:'string11'}

排序的顺序是0,1,2,...,9

一旦我将此 dict 传递给我的 javascript,字典就会使用这种排序方法进行排序:

dict =  {10:'string10', 11:'string11',...,01:'string1', 02:'string', 03:'string3' }

排序顺序为 1,2,3,...,9,0

当我将字典从 python 烧瓶传递到 JS 时,如何保持排序顺序

【问题讨论】:

  • 字典(或 js 中的对象)没有键的排序,因此除非将其切换为数组,否则无法保证排序。
  • @Aplet123 - 他们有,但是如果合适的话,很少使用这个顺序。
  • JavaScript 没有字典,它有不能保证被排序的对象/JSON。
  • @AlexW - objects != JSON :-) 自 2015 年以来,对象属性就有了秩序。(但正如我上面所说:使用它几乎从来都不是一个好主意。 ..)
  • 让我们具体一点。正如@Aplet123 提到的,Python 字典没有顺序。创建字典后不会保留排序顺序。您的解决方案是在 JavaScript 端按键对对象进行排序。使用 dict 内置作为变量名也不是好习惯。

标签: javascript python flask


【解决方案1】:

它不是 字典(在 JavaScript 方面),它是一个对象。对象属性现在有一个顺序(在 ES2015 中添加并扩展到 ES2020 中的更多操作),假设您按照01、然后02 等顺序在对象上创建这些属性,您看到的顺序是您的第二个示例是对象的正确顺序。这是因为属性名称是规范整数格式的字符串(1011)在数字上排在第一位,然后是任何其他属性(例如 0102,它们不是规范整数字符串,因为前导 0) 按创建顺序排列。

如果您想要任意顺序,请使用数组或Map。 (Maps 完全按照添加条目的顺序排列。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-02
    • 1970-01-01
    • 2013-12-05
    • 1970-01-01
    • 2017-02-21
    • 1970-01-01
    • 2021-04-10
    • 2014-12-08
    相关资源
    最近更新 更多