javascript - 当某些键是数字时,按对象键对数据排序不起作用

标签 javascript object

<分区>

我的对象包含这样的数据

const testData = {
        "11": {
            "data": {
                "firstName": "firstName",
                "lastName": "lastName"
            }
        },
        "12": {
            "data": {
                "firstName": "firstName",
                "lastName": "lastName"
            }
        },
        "00": {
            "data": {
                "firstName": "firstName",
                "lastName": "lastName"
            }
        },
        "01": {
            "data": {
                "firstName": "firstName",
                "lastName": "lastName"
            }
        },
        "final": {
            "data": {
                "firstName": "firstName",
                "lastName": "lastName"
            }
        }
    }

我想按像 00, 01, 11, 12, final 这样的对象键对这些数据进行排序

我试过这样但我无法实现我想要的。任何想法将不胜感激?

sorted = Object.keys(testData).sort().reduce((acc, key) => ({
  ...acc, [key]: testData[key]
  }), {})

console.log(sorted)

最佳答案

你不能。 JavaScript 对象键定义的迭代顺序如下:

  1. 数字键,按数字升序排列。 (这包括诸如 "11" 之类的字符串,但 "01"),然后...
  2. 非数字的字符串键,按插入顺序排列。那么……
  3. 符号键,按插入顺序排列。

如您所见,无论插入顺序如何,数字键始终在迭代顺序中首先出现,并且始终按其数字顺序出现。

在您的示例中,"11""12"始终先结束,无论您做什么。

一般来说,依赖于对象(本质上是通过键访问的无序字典)的顺序是不明智的。如果顺序很重要,您应该使用数组。或者,您可以使用 Map

关于javascript - 当某些键是数字时,按对象键对数据排序不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56837426/

相关文章:

javascript - nodejs 上的 heredoc

c++ - 如何在 C++ 中创建一个类的多个实例

c# - 将JSON转换为C#对象格式的在线工具

javascript - 在 Javascript 中创建深层嵌套对象

javascript - 我在 IE7/8 中看不到裁剪器。在 FF 和演示中没有问题(使用 IE7/8)

javascript - post 请求总是在最后执行 angularjs 函数(不按顺序执行)

javascript - 映射文件更改时不要重新启动 IIS

php - 使用redis存储和修改缓存对象

java - 如果温度对象表示低于冰点的温度,则返回 true 的方法(JAVA)

JavaScript - 将 HTML 表格数据导出到 Excel