Javascript Object.keys,但不按顺序JS/TS

Javascript Object.keys,但不按顺序JS/TS,javascript,json,angular,typescript,Javascript,Json,Angular,Typescript,我有一个问题:我有这个JSON=> const json = { "test" : "...", "3" : "...", "go" : "...", "38" : "..." } 当我这样做的时候: const returned = Object.keys(json); 把这个放在里面: 3,38,go,test


我有一个问题:我有这个JSON=>

const json = {
  "test" : "...",
  "3" : "...",
  "go" : "...",
  "38" : "..."
}
当我这样做的时候:

const returned = Object.keys(json);
把这个放在里面:

3,38,go,test
按字母顺序!我只想按“经典”顺序退货。
您有解决方案吗?

您可以使用对象按插入顺序迭代键。正如MDN文档所说

Map对象保存键值对并记住键的原始插入顺序。任何值(对象和基元值)都可以用作键或值。。。。
for…of
循环为每次迭代返回一个[key,value]数组


如果您可以容忍json中的整数键上有前导零,那么您可以让它像这样工作:

const json={
“测试”:“…”,
"03" : "...",
“开始”:“…”,
"038" : "..."
}

至少在Chrome中的console.log(Object.keys(json))//[“test”、“03”、“go”、“038”]如果插入顺序重要,请使用映射

如果插入顺序与使用有关,则贴图将根据规范保留插入顺序

演示

let map=new map();
set('test','…');
map.set('3','…');
map.set('go','…');
map.set('38','…');
for(map.keys()的键)

console.log(key)
您可以使用一些技巧,将
+
添加到如下所示的对象数字键,然后再次将其转换为数字:

const json = {
  test: "...",
  "+3": "...",
  go: "...",
  "+38": "...",
};

for (let key in json) {
  let value = json[key];
  if (key[0] === "+") {
    key = +key;
  }

  console.log(key + ": " + value);
}

这是不可能的。看起来有关密钥顺序的信息没有存储在任何可能有用的地方。在Chrome中,Reflect.ownKeys(json)给了我[“3”、“38”、“test”、“go”],这与
Object.keys
是一样的。是的:我的意思是,顺序显然是固定的,但整数排在第一位,然后是按时间顺序排列的字符串。因此,问题显然只存在于类似整数的字符串中。此外,“测试”和“开始”是OP的“开始”和“测试”的另一种方式。根据具体情况,这个问题可能解决了一半。