当某些键为数字键时,无法按对象键对数据进行排序

U r*_*ock 1 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"
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

我想按对象键对数据进行排序 00, 01, 11, 12, final

我已经尝试过这种方法,但是我无法达到我想要的效果。任何想法都会感激不尽?

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

console.log(sorted)
Run Code Online (Sandbox Code Playgroud)

Mad*_*iha 7

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

  1. 数字键,按升序排列。(包括诸如"11",但 包括)的字符串"01",然后...
  2. 不是数字的字符串键,按插入顺序。然后...
  3. 符号键,按其插入顺序。

如您所见,无论插入顺序如何,数字键始终将始终以迭代顺序显示,并且始终以其数字顺序显示。

在你的榜样,"11""12"永远结束了第一,不管你做什么。

通常,明智的做法是依靠对象的顺序(本质上是通过键访问的无序词典)。如果顺序很重要,则应该使用数组。或者,您可以使用Map