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

时间:2019-07-01 14:25:01

标签: 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"
            }
        }
    }

我通过在解决问题的所有对象键之前添加特殊字符来稍微修改我的数据

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

2 个答案:

答案 0 :(得分:7)

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

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

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

在您的示例中,无论您做什么,"11""12"总是最终

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

答案 1 :(得分:-2)

尝试这样的事情:

sorted = Object.keys(testData).sort((a,b) => {
    if (a < b) return -1;
    if (a > b) return 1;
    return 0;
});

console.log(sorted)