I need for some debugging to see the original order of one JavaScript object's properties but (at least in chrome devtools) console.log() shows me an alphabetically ordered object.
Ex:
var obj = {
z: 1,
t: 2,
y: 3,
a: 4,
n: 5,
k: 6
}
console.log(obj) shows this:
Object {z: 1, t: 2, y: 3, a: 4, n: 5…}
a:4
k:6
n:5
t:2
y:3
z:1
//expected (needed ) original order
z: 1
t: 2
y: 3
a: 4
n: 5
k: 6
console.log does indeed sort the properties, in some cases you can use JSON.stringify which preserves the order, e.g.
console.log(JSON.stringify(obj, null /*replacer function */, 4 /* space */))
NB: contrary to the popular belief, js objects maintain the enumeration order, as per the OwnPropertyKeys specification (integers first, then other properties in insertion order)
If you need to log a very big object, to be able to collapse keys, another option would be to transform it to key-value pair arrays.
let keepKeyOrder = function(obj) {
if (typeof obj === 'object' && !Array.isArray(obj)) {
let transformKey = (k) => [k, keepKeyOrder(obj[k])];
return Object.keys(obj).map(transformKey);
} else {
return obj;
}
};
console.log(keepKeyOrder({a:3,c:4,b:{b3:123,b2:234,b1:345}}));
Outputs:
Another easy solution would be:
console.log(Object.entries(obj).map(k=>({[k[0]]:k[1]})))
来源:https://stackoverflow.com/questions/39054764/show-original-order-of-object-properties-in-console-log
