提问人:U rock 提问时间:7/1/2019 最后编辑:Madara's GhostU rock 更新时间:8/13/2019 访问量:234
当某些键为数字 [Duplicate] 时,按对象键对数据进行排序不起作用
sorting data by object keys does not work when some of the keys are numeric [duplicate]
问:
我有对象包含这样的数据
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)
答:
7赞
Madara's Ghost
7/1/2019
#1
你不能。JavaScript 对象键定义的迭代顺序如下:
- 数字键,按数字升序排列。(这包括诸如 ,但不是 )、THEN...
"11"
"01"
- 非数字的字符串键,按插入顺序排列。然后。。。
- 符号键,按其插入顺序排列。
如您所见,无论插入顺序如何,数字键将始终以迭代顺序首先出现,并且始终按其数字顺序出现。
在你的例子中,无论你做什么,它总是会排在第一位。"11"
"12"
一般来说,依赖对象的顺序(本质上是你通过键访问的无序字典)是不明智的。如果顺序很重要,你应该使用数组。或者,您可以使用 .Map
评论
0赞
U rock
7/2/2019
如果我像这个“011”一样在“11”前面加 0 怎么办。这将按照我们的需要进行排序,排序后,我们需要删除所有键中的前 0。
0赞
Madara's Ghost
7/2/2019
当你在对象中拥有键“11”和键“01”的那一刻,无论如何,“11”总是排在第一位。如果添加填充 0,然后在将其放入对象之前将其删除,则不会执行任何操作。不过说真的,使用 Map 或数组。
0赞
U rock
7/2/2019
您能否提供有效使用地图的演示。
0赞
U rock
7/2/2019
如果我将“0”、“1”、“12”、“14”设置为这样,我可以期望所有浏览器中的保证顺序吗?
0赞
U rock
7/2/2019
我通过在所有键之前添加特殊字符来更新我的帖子。
-2赞
Julliano Osorio
7/1/2019
#2
尝试这样的事情:
sorted = Object.keys(testData).sort((a,b) => {
if (a < b) return -1;
if (a > b) return 1;
return 0;
});
console.log(sorted)
评论
0赞
U rock
7/1/2019
我们可以得到上面的结果,这没有帮助,我应该轮换整个数据Object.keys(testData).sort()
评论