Dyl*_*lan 5 javascript google-chrome javascript-objects google-chrome-devtools
我正在处理一个错误,该错误是由对象中的属性顺序引起的。是的,也许在这种情况下使用数组会更好,但这不是这个问题的重点。
当我将对象打印到控制台时,它会自动为我排序,这在这种情况下很烦人。
在此屏幕截图中,您会看到即时预览(顶部的灰色文本)未排序,但当您打开对象时,它已排序。
内部属性也是如此。请注意上面屏幕截图中的项目“0.180 - 0.299”,以及它的属性如何在即时预览中未正确排序。但当我们打开它们时,它们是:
通常这很方便,但我想知道是否有办法暂时禁用此功能。
这是它在 React 开发工具中的样子:
我认为这实际上可能是 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)
| 归档时间: |
|
| 查看次数: |
2276 次 |
| 最近记录: |