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

问题描述 投票:1回答:1

这个问题在这里已有答案:

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

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

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

enter image description here

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

enter image description here

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

以下是它在React开发工具中的外观:

enter image description here

javascript google-chrome google-chrome-devtools javascript-objects
1个回答
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);
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>

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

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

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

console.log(a);
© www.soinside.com 2019 - 2024. All rights reserved.