我有一个data.js
文件,其中包含这样的对象:
var somedata = {
"": "test",
"51": "f",
"123": "test1",
"67": "test2",
"hello": "ghr",
...
}
module.exports = somedata;
不幸的是,该对象被重新排序,并且顺序对于应用程序非常重要。此时,有人建议使用地图
因此,它变成了:
var somedata = new Map(Object.entries({
"": "test",
"51": "f",
"123": "test1",
"67": "test2",
"hello": "ghr",
...
}))
module.exports = somedata;
嗯,那也不起作用(或者也许我只是没有得到地图)。因此,目前我建立了一种变通方法,在该方法中,我实际上使用regex读取了文件并将其放入map对象中以保留对象顺序。不幸的是,随着data.js
变得越来越大,这种方法非常耗时。在那一点上,我觉得我在错误地看待事物。
我的问题:是否可以某种方式保留对象顺序?或者至少比解析整个文件更快的解决方法?
答案 0 :(得分:2)
您可以使用地图,但如果您输入的是对象,则不能使用地图。 Objects do not guarantee key order。相反,您可以使用成对的数组并从中构造一个映射。 Maps preserve insertion order:
const input = [
[42, "Alice"],
[30, "Bob"],
[14, "Carol"],
[39, "David"],
[41, "Edel"],
[2, "Fred"],
]
const map = new Map(input);
for(const [key, value] of map.entries()) {
console.log(key, value)
}
答案 1 :(得分:1)
除了在插入时使用数组或其他保持顺序数据结构来保存键的顺序外,没有其他方法。
对象的键首先按照值(以32位正数作为字符串)之类的索引进行排序,然后按插入顺序依次处理其他字符串,然后按符号进行排序。
一种快速的解决方法是在数字前面加一个破折号作为密钥,并使用它来访问对象。