有没有办法阻止 Chrome 控制台中的自动排序?

Dyl*_*lan 5 javascript google-chrome javascript-objects google-chrome-devtools

我正在处理一个错误,该错误是由对象中的属性顺序引起的。是的,也许在这种情况下使用数组会更好,但这不是这个问题的重点。

当我将对象打印到控制台时,它会自动为我排序,这在这种情况下很烦人。

在此屏幕截图中,您会看到即时预览(顶部的灰色文本)未排序,但当您打开对象时,它已排序。

在此输入图像描述

内部属性也是如此。请注意上面屏幕截图中的项目“0.180 - 0.299”,以及它的属性如何在即时预览中未正确排序。但当我们打开它们时,它们是:

在此输入图像描述

通常这很方便,但我想知道是否有办法暂时禁用此功能。

这是它在 React 开发工具中的样子:

在此输入图像描述

Amo*_*s47 1

我认为这实际上可能是 chrome 存储和获取对象的方式。我似乎无法证明它确实存储了对象的顺序。是什么让您确定它以不同的方式存储它?

const a = { 2: {d: 1, e:1, a:1}, 3: {d: 1, e:1, a:1}, 1: {d: 1, e:1, a:1}};
const keys = Object.keys(a);
for(let key of keys){
  console.log(key)
  console.log(a[key]);
  for(let embeddedKey of Object.keys(a[key])){
    console.log(embeddedKey);
  }
}

console.log(JSON.stringify(a));

console.log('---- underscore stuff ----');

_.each(a, (val, key) => {
  console.log(key);
  console.log(val)
  _.each(val, (embeddedVal, embeddedKey) => {
    console.log(embeddedKey);
  });
});
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
Run Code Online (Sandbox Code Playgroud)

编辑:更改了脚本以表明它实际上在使用数字时已经排序,但在使用字符串时则不然。

因此,解决方案是在需要保留顺序时使用字符串作为键。您将需要使用一些特殊的格式,这样它就不会被视为数字。

let a = {"2n": {b: 1, a: 1}, "1n": {d: 1, c:1}};

console.log(a);
Run Code Online (Sandbox Code Playgroud)