我正在处理一个错误,该错误是对象中属性顺序的结果。是的,或许在这种情况下使用数组会更好,但这不是这个问题的重点。
当我将对象打印到控制台时,它会自动为我排序,这在这种情况下很烦人。
在此屏幕截图中,您会看到即时预览(顶部的灰色文本)未排序,但是当您打开对象时,它会被排序。
内在属性也是如此。请注意上面屏幕截图中的项目“0.180 - 0.299”,以及它的属性在即时预览中的排序方式不正确。但是,当我们打开它们时,它们是:
通常这很方便,但我想知道是否有办法暂时禁用此功能。
以下是它在React开发工具中的外观:
答案 0 :(得分: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>
&#13;
编辑:更改了脚本以显示它在使用数字时实际上已经排序,但在使用字符串时却没有排序。
因此,解决方案是在需要保留订单时使用字符串作为键。您需要使用一些特殊格式,因此不会将其视为数字。
let a = {"2n": {b: 1, a: 1}, "1n": {d: 1, c:1}};
console.log(a);
&#13;